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