Chính -prune
nói find
không tái diễn dưới một thư mục.
find -L -path ~/.wine/dosdevices -prune -o -type f -name 'My Favorite Movie.*' -print
Nếu bạn muốn sử dụng -lname
trong điều kiện của mình, bạn không thể sử dụng -L
tùy chọn này, vì -L
khiến hầu hết các vị từ hành động theo mục tiêu của liên kết, bao gồm cả -lname
. Đề nghị của tôi trong trường hợp đó là sử dụng cả thư mục chính của bạn và thư mục gốc của đĩa cứng làm gốc tìm kiếm của bạn.
find ~ /mnt/hdd -xtype f -name 'My Favorite Movie.*'
Bạn có thể chạy find ~ -type l …
để thu thập một danh sách các liên kết tượng trưng và sử dụng chúng như các gốc bổ sung.
( IFS=$'\n'; set -f;
find ~ $(find ~ -type l -lname '/mnt/hdd/*') \
-xtype f -name 'My Favorite Movie.*' )
Nếu bạn thực sự muốn lặp lại theo các liên kết tượng trưng, bạn có thể loại trừ các liên kết tượng trưng cụ thể theo mục tiêu thay vì theo tên. Tuy nhiên, bạn chỉ có thể loại trừ một danh sách hữu hạn, không phải là một mẫu hoặc cây con theo cách này.
find -L \( -samefile /exclude/this -o -samefile ~/and/that \) -prune -o \
-type f -name 'My Favorite Movie.*' -print
Bạn có thể sử dụng các tiêu chí khác, chẳng hạn như ! -writable
(các tệp mà bạn không có quyền ghi), nhưng tôi không nghĩ GNU find có cách để lặp lại theo các liên kết tượng trưng chỉ khi văn bản đích của chúng khớp với một biểu thức nhất định.
Bạn có thể xây dựng một find
lệnh thực hiện gần như những gì bạn muốn ngoại trừ không loại trừ đủ các liên kết tượng trưng, chạy find2perl để chuyển đổi truy vấn thành tập lệnh Perl và điều chỉnh tập lệnh Perl một chút. Tuy nhiên, có nhiều công tắc của GNU thấy rằng find2perl không nhận ra.
-prune
chỉ là thứ tôi đang tìm kiếm. Tôi đã thấy rằngfind ~ \( -lname ~ -o -lname ~/\* -o -lname / \) -xtype d
liệt kê tất cả các liên kết tượng trưng mà tôi không muốn theo dõi; Bây giờ tôi đang cố gắng tìm cách sử dụng truy vấn đó để cắt tỉa.