O -prune
primary informa ao find
para não reciclar em um diretório.
find -L -path ~/.wine/dosdevices -prune -o -type f -name 'My Favorite Movie.*' -print
Se você quiser usar -lname
em sua condição, não será possível usar a opção -L
, porque -L
faz com que a maioria dos predicados atue no destino do link, incluindo -lname
. Minha recomendação nesse caso seria usar tanto o diretório inicial quanto a raiz do disco rígido como raízes da pesquisa.
find ~ /mnt/hdd -xtype f -name 'My Favorite Movie.*'
Você pode executar find ~ -type l …
para reunir uma lista de links simbólicos e usá-los como raízes adicionais.
( IFS=$'\n'; set -f;
find ~ $(find ~ -type l -lname '/mnt/hdd/*') \
-xtype f -name 'My Favorite Movie.*' )
Se você realmente quiser recorrer a links simbólicos, poderá excluir links simbólicos específicos por destino, em vez de por nome. No entanto, você só pode excluir uma lista finita, não um padrão ou uma subárvore dessa maneira.
find -L \( -samefile /exclude/this -o -samefile ~/and/that \) -prune -o \
-type f -name 'My Favorite Movie.*' -print
Você pode usar outros critérios, como ! -writable
(arquivos para os quais você não tem permissão de gravação), mas não acho que o GNU find tenha uma maneira de recorrer a links simbólicos apenas se o texto de destino corresponder a um determinado expressão.
Você poderia criar um comando find
que faz quase o que você deseja, exceto para não excluir links simbólicos suficientes, executar find2perl para converter a consulta em um script Perl e ajustar o script Perl um pouco. Existem muitos switches do GNU find que o find2perl não reconhece, no entanto.