2011-12-15 6 views
35

ls /home/user/new/*.txt in tất cả các file txt trong thư mục đó. Tuy nhiên nó in kết quả như sau:Để chỉ hiển thị tên file mà không cần toàn bộ đường dẫn thư mục

[[email protected]]$ ls /home/user/new/*.txt 
/home/user/new/file1.txt /home/user/new/file2.txt /home/user/new/file3.txt 

v.v.

Tôi muốn chạy lệnh ls không từ thư mục /home/user/new/ vì vậy tôi đã cung cấp cho các tên thư mục đầy đủ, nhưng tôi muốn đầu ra được chỉ như

[[email protected]]$ ls /home/user/new/*.txt 
file1.txt file2.txt file3.txt 

Tôi không muốn toàn bộ đường dẫn . Chỉ cần tên tệp. Vấn đề này phải được giải quyết bằng cách sử dụng lệnh ls, vì đầu ra của nó có nghĩa là cho một chương trình khác.

+0

Hệ điều hành nào? Ví dụ OS X làm những gì bạn muốn. Bạn có chắc chắn ls không phải là bí danh? –

Trả lời

60

ls whateveryouwant | xargs -n 1 basename

Điều đó có phù hợp với bạn không?

Nếu không, bạn có thể (cd /the/directory && ls) (vâng, ngoặc dự định)

+0

Có, nó hoạt động. Cảm ơn nhiều. – Ashish

+2

Có lẽ bạn nên sử dụng 'ls -d' trong trường hợp' whateveryouwant' đề cập đến nhiều thư mục. –

+3

Lưu ý rằng nếu đường dẫn chứa dấu cách xargs sẽ phá vỡ chúng. Bạn cần sử dụng 'xargs -d '\ n' -n 1' để thay thế. – Zitrax

7

Có một số cách bạn có thể đạt được điều này. Một sẽ là một cái gì đó như:

for filepath in /path/to/dir/* 
do 
    filename=$(basename $file) 

    ... whatever you want to do with the file here 
done 
4

bạn có thể thêm một kịch bản sed để commandline của bạn:

ls /home/user/new/*.txt | sed -r 's/^.+\///' 
1

tôi thích tên cơ sở đó đã được trả lời bằng cách FGE. Một cách khác là:

ls /home/user/new/*.txt|awk -F"/" '{print $NF}' 

thêm một cách xấu xí là:

ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1 
4

Một cách ưa thích để giải quyết nó là bằng cách sử dụng hai lần "rev" và "cắt":

find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev 
29

Không cần Xargs và tất cả, ls là quá đủ.

ls -1 *.txt 

hiển thị hàng khôn ngoan

+8

Điều này không đúng nếu bạn đọc OP cẩn thận. Điều này chỉ hoạt động nếu bạn đang ở trong thư mục đó. –

+0

Hoạt động hoàn hảo! Cảm ơn @VRVigneshwara! 'ls -1 bin /' các mục danh sách bên trong bin/directory mà không có đường dẫn trên Debian Debian. –

0

chỉ hy vọng sẽ có ích cho một ai đó là vấn đề cũ dường như trở lại tất cả bây giờ và một lần nữa và tôi luôn luôn tìm lời khuyên tốt ở đây.

Vấn đề của tôi là để liệt kê trong một file văn bản tất cả các tên của "* .txt" tập tin trong một thư mục nào đó mà không đường và không có phần mở rộng từ 7,5 chuỗi DataStage.

Các giải pháp chúng tôi sử dụng là:

ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt 
2

(cd dir ; ls)

sẽ chỉ tên tập tin đầu ra trong dir. Sử dụng ls -1 nếu bạn muốn một dòng trên mỗi dòng.