Chạy một ls mà không nhận được đường dẫn đầy đủ


5

Tôi muốn một danh sách đơn giản các tập tin trong một thư mục không phải là thư mục hiện tại của tôi. Tôi chạy ls /other/directory/*.txtvà nhận:

/ther/directory/file1.txt
/ther/directory/file2.txt

Tôi muốn:

file1.txt
file2.txt

Làm thế nào tôi có thể có được danh sách thứ hai?


1
Bạn có thể vui lòng cho chúng tôi biết bạn đang sử dụng bản phân phối linux nào không? Bởi vì thông thường, ls xuất ra danh sách thứ hai mà bạn đề cập.
Ruel

chỉ cần thử nó, tôi chỉ có thể nhận được đường dẫn đầy đủ khi tôi gọi 'ls / path / *' mà không có dấu hoa thị thì không thể, hệ thống gì | | bạn có dùng vỏ không?

Tôi đang sử dụng CentOS. Ngoài ra, tôi đã đơn giản hóa câu hỏi ban đầu. Tôi chỉ muốn tập tin văn bản từ thư mục. Tôi đã không nhận ra sự *.txtkhác biệt. Tôi cập nhật câu hỏi.
dùng1

Câu trả lời:


13

(cd /other/directory && ls)


3

Có một số lý do tại sao bạn không thể sử dụng ls -1?

$ ls -1 /other/directory
file1
file2

BIÊN TẬP:

Tôi nhận thấy bạn đã thay đổi câu hỏi ngay bây giờ - giải pháp của tôi sẽ không hoạt động với ví dụ mới của bạn về ls /other/directory/*.txt. Thay vào đó, hãy sử dụng một cái gì đó như giải pháp của khachik , vd

$ (cd /other/directory && ls -1 *.txt)

1

1) Tôi không chắc chắn điều này không nên có trên superuser.com

2) ls không in đường dẫn đầy đủ nào: ls -1 /your/dir

Chỉnh sửa Câu hỏi đã thay đổi. Nhận xét của Paul dưới đây tôi đang cập nhật câu trả lời của tôi. Bạn có thể làm như thế này:

ls -1 /home/rich/*.txt | sed s/^.*\\/\//

Đó là âm 1, không phải l, mặc dù tôi cũng làm việc. Giải thích: ls -l / -1 ghi tên tệp với nội dung bạn không muốn. Mỗi dòng được dẫn qua sed, ở đây đang thực hiện thay thế, như được chỉ định bởi s /. Một sự thay thế có dạng:

s/text/replacement/

Chúng tôi đang thay thế mọi thứ từ đầu dòng cho ^đến cuối cùng /( /là một ký tự đặc biệt để chúng tôi phải thoát khỏi nó \\/) mà không có gì - tức là loại bỏ nó, và do đó để lại cho bạn chỉ với tên tệp.


1
Không phải là một câu trả lời - nên là một nhận xét
Paul R

1
@Richard, câu trả lời của Paul có một giải pháp. Bạn không có bất kỳ.
Ruel

1
@Richard (1) là một nhận xét cho câu hỏi, (2) không chính xác (lưu ý sự khác biệt giữa 1l)
Paul R

1
không trả lời sao chép :)
Ruel

1
Nhân tiện, bình luận của bạn 1) * Tôi không chắc điều này không nên trên superuser.com * là không chính xác. .. điều này nên có trên superuser.com
Ruel

1

ls -1 /other/directory/*.txt |xargs basename

  • -1 sẽ liệt kê một tệp trên mỗi dòng chỉ với tên tệp (hoặc đường dẫn)
  • Sử dụng ký tự đại diện và / hoặc đưa ra lsmột đường dẫn đầy đủ sẽ xuất ra đường dẫn đầy đủ, tuyệt đối cho mỗi tệp. basenamesẽ loại bỏ đường dẫn để lại cho bạn chỉ với tên tệp.

Đóng, nhưng điều đó không hoạt động vì dòng đầu ra thứ hai từ 'ls' gây ra lỗi: basename: operand thêm '/etc/init.d/dyn-qlpinitiator' (sử dụng Ubuntu 14).
Crossfit_and_Beer

bạn có thể sử dụngxargs -n1 basename
Boop

0
for i in `ls /some/directory` ;do basename $i;done

Biểu thức trong `` được mở rộng thành các tệp, sau đó mỗi tệp được chuyển đến tên cơ sở. Hãy cẩn thận: Không hoạt động với các tệp chứa khoảng trắng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.