2008-09-19 4 views
102

Giả sử tôi có một thư mục /dir bên trong đó có 3 liên kết tượng trưng đến thư mục khác /dir/dir11, /dir/dir12, và /dir/dir13. Tôi muốn liệt kê tất cả các tệp trong dir bao gồm các tệp trong số dir11, dir12dir13.danh sách LINUX đệ quy tất cả các file trong một thư mục bao gồm các file trong thư mục liên kết tượng trưng

Để chung chung hơn, tôi muốn liệt kê tất cả các tệp bao gồm các tệp trong thư mục là các liên kết tượng trưng. find ., ls -R, v.v. dừng tại liên kết tượng trưng mà không cần điều hướng đến chúng để liệt kê thêm.

+0

có thể trùng lặp của [Làm thế nào để chỉ nhận được tên tập tin với linux \ 'find \'?] (Http://stackoverflow.com/questions/5456120/how-to -only-get-file-name-with-linux-find) –

Trả lời

157

Tùy chọn -L để ls sẽ thực hiện những gì bạn muốn. Nó dereferences liên kết tượng trưng.

Vì vậy, lệnh của bạn sẽ là:

ls -LR 

Bạn cũng có thể thực hiện điều này với

find -follow 

Tùy chọn -follow đạo tìm theo các liên kết tượng trưng đến thư mục.

Trên Mac OS X sử dụng

find -L 

như -follow đã bị phản đối.

+10

-follow không được hỗ trợ -L trong các phiên bản tìm kiếm mới hơn. – pjz

+0

@pjz: có tham chiếu chéo cho '-follow không được chấp thuận hay không; sử dụng -L '? Hơi ngạc nhiên đáng ngạc nhiên của tôi, tôi đã tìm thấy '-L' và '-H' được liệt kê trong tiêu chuẩn POSIX/SUS tại http://www.opengroup.org/onlinepubs/009695399/toc.htm, và thậm chí còn hơn cả sự ngạc nhiên của tôi không có '-follow', vì vậy tôi đã trả lời câu hỏi của riêng mình. –

+0

điều này không hiệu quả đối với tôi. đầu tiên không có gì xảy ra sau đó tôi đã thử với '-follow'- và nó nói nó couln't tìm thư mục' ollow' –

7

Sử dụng ls:

ls -LR 

từ 'người đàn ông ls':

-L, --dereference 
      when showing file information for a symbolic link, show informa‐ 
      tion for the file the link references rather than for the link 
      itself 

Hoặc, sử dụng find:

find -L . 

Từ tìm manpage:

-L  Follow symbolic links. 

Nếu bạn thấy bạn chỉ muốn theo một liên kết tượng trưng vài (như có thể chỉ là những cái mà bạn đã đề cập), bạn nên xem tùy chọn -H, chỉ theo các liên kết tượng trưng mà bạn truyền cho nó trên dòng lệnh.

35
find /dir -type f -follow -print 

-type f có nghĩa là nó sẽ hiển thị tập tin thực sự (không liên kết tượng trưng)

-follow có nghĩa là nó sẽ theo symlink thư mục của bạn

-print sẽ gây ra nó để hiển thị tên tập tin.

Nếu bạn muốn có một màn hình loại ls, bạn có thể làm như sau

find /dir -type f -follow -print|xargs ls -l 
+0

đẹp, công trình này tuyệt vời –

+0

Điều này cũng hoạt động tốt trên OS X –

+0

điều này tạo ra một màn hình đẹp hơn tùy chọn 'ls -L' – eusoubrasileiro

2
ls -R -L 

-L dereferences liên kết tượng trưng. Điều này cũng sẽ làm cho nó không thể nhìn thấy bất kỳ liên kết đến các tập tin, mặc dù - họ sẽ trông giống như tập tin chỉ vào.

97

Làm thế nào về tree? tree -l sẽ theo dõi các liên kết tượng trưng.

Tuyên bố từ chối: Tôi đã viết gói này.

+41

upvoted để viết và làm cho phần mềm có sẵn mát mẻ:) – mit

+2

Làm thế nào về một gói arch? –

+0

@Mr_and_Mrs_D pacman -S extra/tree – etherous

5
find -L /var/www/ -type l 

# man find 
-L  Follow symbolic links. When find examines or prints information about files, the information used shall be taken from the 

thuộc tính của tập tin mà các điểm liên kết, chứ không phải từ bản thân liên kết (trừ khi đó là một liên kết tượng trưng hỏng hoặc tìm thấy là không thể kiểm tra các tập tin để mà liên kết điểm). Sử dụng tùy chọn này ngụ ý -noleaf. Nếu sau này bạn sử dụng tùy chọn -P, -noleaf sẽ vẫn có hiệu lực. Nếu -L là có hiệu lực và phát hiện thấy một liên kết tượng trưng đến một thư mục con trong khi tìm kiếm, thư mục con được trỏ đến bởi liên kết tượng trưng sẽ tìm kiếm .

2

Tôi biết tree là thích hợp, nhưng tôi chưa cài đặt cây. Vì vậy, tôi có một khá gần thay thế here

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/' 
+0

Đây chính xác là những gì tôi cần. Cảm ơn bạn. –