-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перечислены все символические ссылки, по которым я не хочу следовать; Сейчас я пытаюсь найти способ использовать этот запрос для сокращения.