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
.)