-prune
Первичного говорит find
не Recurse в директории.
find -L -path ~/.wine/dosdevices -prune -o -type f -name 'My Favorite Movie.*' -print
Если вы хотите использовать -lname
в своем состоянии, вы не можете использовать эту -L
опцию, потому что -L
заставляет большинство предикатов воздействовать на цель ссылки, в том числе -lname
. В этом случае я бы рекомендовал использовать как домашний каталог, так и корневой каталог жесткого диска в качестве корней поиска.
find ~ /mnt/hdd -xtype f -name 'My Favorite Movie.*'
Вы можете запустить, find ~ -type l …
чтобы собрать список символических ссылок и использовать их в качестве дополнительных корней.
( IFS=$'\n'; set -f;
find ~ $(find ~ -type l -lname '/mnt/hdd/*') \
-xtype f -name 'My Favorite Movie.*' )
Если вы действительно хотите использовать рекурсив по символическим ссылкам, вы можете исключить определенные символические ссылки по цели, а не по имени. Однако вы можете исключить только конечный список, но не шаблон или поддерево.
find -L \( -samefile /exclude/this -o -samefile ~/and/that \) -prune -o \
-type f -name 'My Favorite Movie.*' -print
Вы можете использовать другие критерии, такие как ! -writable
(файлы, на которые у вас нет разрешения на запись), но я не думаю, что GNU find может рекурсировать по символическим ссылкам, только если их целевой текст соответствует определенному выражению.
Вы можете создать find
команду, которая делает почти то, что вы хотите, за исключением того, что не исключаете достаточное количество символических ссылок, запустите find2perl, чтобы преобразовать запрос в скрипт Perl, и немного подправьте скрипт Perl. Однако многие переключатели GNU обнаруживают, что find2perl не распознает.
-prune
это просто то, что я искал. Я обнаружил, что в немfind ~ \( -lname ~ -o -lname ~/\* -o -lname / \) -xtype d
перечислены все символические ссылки, по которым я не хочу следовать; Сейчас я пытаюсь найти способ использовать этот запрос для сокращения.find ~ <negative criteria> -prune -o <positive criteria> -print
, такfind ~ \( -lname ~ -o -lname ~/\* -o -lname / \) -xtype d -prune -o <whatever it is you want> -print
Для поиска ВСЕХ ссылок, это работало для меня:
источник
Сколько символических ссылок на жесткие диски у вас есть? Если это не слишком много, одним из решений является не использовать «-L» при явном указании символических ссылок, которым вы хотите следовать в командной строке поиска. Что-то типа:
Это будет искать текущий каталог ("."), А также символическую ссылку "~ / Videos / Films", но не будет переходить в другие символические ссылки.
источник
Другое решение, которое позволяет обойти эту проблему (по крайней мере, в моем случае), заключается в использовании bind mounts вместо символических ссылок для каталогов на жестком диске. Это делается путем добавления записей в
/etc/fstab
следующем виде:/mnt/hdd/Films /home/mark/Videos/Films none bind 0 0
источник