Liệt kê đệ quy tất cả các tệp trong một thư mục bao gồm các tệp trong thư mục symlink


147

Giả sử tôi có một thư mục /dirbên trong đó có 3 liên kết tượng trưng đến thư mục khác /dir/dir11, /dir/dir12/dir/dir13. Tôi muốn liệt kê tất cả các tập tin trong dirđó có những người thân trong dir11, dir12dir13.

Để 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 -Rvv dừng lại ở liên kết tượng trưng mà không điều hướng vào chúng để liệt kê thêm.


Câu trả lời:


232

Các -Ltùy chọn để lssẽ 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

Các -followtùy chọn chỉ dẫn tìm để theo các liên kết tượng trưng đến các thư mục.

Trên Mac OS X sử dụng

find -L

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


14
-Follow không được dùng để ủng hộ -L trong các phiên bản tìm kiếm mới hơn.
pjz

@pjz: có tham chiếu chéo cho '-follow không dùng nữa; sử dụng -L '? Hơi ngạc nhiên một chút, tôi đã tìm thấy '-L' và '-H' được liệt kê trong tiêu chuẩn POSIX / SUS tại opengroup.org/onlinepub/009695399/toc.htm , và thậm chí nhiều hơn với sự ngạc nhiên của tôi không '-follow', vì vậy tôi đã trả lời câu hỏi của riêng tôi
Jonathan Leffler

điều này đã không làm việc cho tôi. Đầu tiên không có gì xảy ra sau đó tôi đã thử với -follow- và nó nói rằng nó không tìm thấy thư mụcollow
smatthewenglish

4
Trên OS X 10.10, nó hoạt động: find -L .- Tôi gặp vấn đề tương tự như @ S.Matthew_English
fregante

Câu trả lời của bạn là tốt, nhưng tôi muốn followchỉ đường dẫn tệp (đường dẫn đầy đủ đến tệp) chứ không phải đường dẫn thư mục, làm thế nào tôi có thể làm điều đó?
Vicky Dev

116

Làm thế nào về cây ? tree -lsẽ theo symlink.

Tuyên bố miễn trừ trách nhiệm : Tôi đã viết gói này.


2
Làm thế nào về một gói vòm?
Mr_and_Mrs_D

Đây là một cái nhìn trực quan hơn ls. Nó cũng dễ dàng hơn để dán xung quanh.
dhaupin

46
find /dir -type f -follow -print

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

-follow có nghĩa là nó sẽ theo liên kết thư mục của bạn

-print sẽ khiến nó hiển thị tên tập tin.

Nếu bạn muốn hiển thị kiểu ls, bạn có thể làm như sau

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

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

10

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ừ trang tìm kiếm:

-L     Follow symbolic links.

Nếu bạn thấy bạn chỉ muốn theo một vài liên kết tượng trưng (như có thể chỉ là các liên kết toplevel 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 chuyển đến nó trên dòng lệnh.


5

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

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

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

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

các thuộc tính của tệp mà liên kết trỏ đến, không phải từ chính liên kết (trừ khi đó là liên kết tượng trưng bị hỏng hoặc tìm thấy không thể kiểm tra tệp mà các điểm liên kết). 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 có hiệu lực và tìm thấy một liên kết tượng trưng đến thư mục con trong khi tìm kiếm, thư mục con được chỉ ra bởi liên kết tượng trưng sẽ được tìm kiếm.


2
ls -R -L

-Lhội nghị liên kết tượng trưng. Tuy nhiên, điều này cũng sẽ khiến bạn không thể thấy bất kỳ liên kết tượng trưng nào đến các tệp - mặc dù vậy - chúng sẽ trông giống như tệp được trỏ.


-1

trong trường hợp bạn muốn in tất cả nội dung tập tin : find . -type f -exec cat {} +

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.