find / -type f -perm -2
Isso é recursivo. Isso é o que o find faz.
find / -prune -type f -perm -2
Aqui, você está instruindo find a aplicar -prune a tudo o que encontrar. As condições e ações são processadas da esquerda para a direita; já que não há condição antes de -prune , é aplicado incondicionalmente. Portanto, a primeira coisa que find encontra, que é o argumento de linha de comando / , tem -prune aplicado a ele e, portanto, find não percorre o conteúdo do diretório. Como / não corresponde às seguintes condições, não é impresso.
Para processar apenas as entradas do diretório de nível superior, você precisa aplicar -prune aos diretórios , exceto os argumentos da linha de comando . A maneira portátil de fazer isso é usar /. no final do caminho passado na linha de comando. Isso faz com que find trate seu nome como . , portanto, você pode usar -name . para corresponder a eles. Em um percurso recursivo, nenhum arquivo é chamado . , pois esse nome é reservado. Agora existem três casos diferentes:
- Diretório de nível superior: recursivo.
- Outro diretório: não recurse.
- Arquivo regular que pode ser escrito mundialmente: imprimir.
Para especificar vários comportamentos diferentes, use o operador -o (“ou”). O primeiro para o qual todas as condições correspondem se aplica.
find /. -name . -o -type d -prune -o -type f -perm -2 -print
Algumas versões de find permitem que você escreva find / -name / -o -type d -prune -o … , mas outras não (por exemplo, BusyBox).
Algumas versões de find suportam as opções -mindepth e -maxdepth para restringir a passagem recursiva. Se a sua pesquisa for compatível, você poderá usar isso em vez de -prune .
find / -mindepth 1 -maxdepth 1 -type f -perm -2
( -mindepth e -maxdepth são opções globais, a parte de condições e ações é -type f -perm -2 com o rastreio implícito -print .)