find
atravessa a (s) árvore (s) de diretórios especificada e avalia a expressão fornecida para cada arquivo encontrado. A travessia começa no caminho dado. Veja um resumo de como o find . -name foo
opera:
- Primeiro caminho na linha de comando:
.
- O nome base (
.
) corresponde ao padrãofoo
? Não, então não faça nada.
Acontece que/tmp/foo
é outro nome para o mesmo diretório. Masfind
não sabe disso (e não deve tentar descobrir). - O caminho é um diretório? Sim, então atravesse-a. Enumere as entradas em
.
e, para cada entrada, execute o processo de percurso.- O diretório está vazio: não contém nenhuma entrada diferente de
.
e..
, quefind
não percorre recursivamente. Então o trabalho está terminado.
- O diretório está vazio: não contém nenhuma entrada diferente de
- O nome base (
e find /tmp/foo
:
- Primeiro caminho na linha de comando:
/tmp/foo
- O nome base (
foo
) corresponde ao padrãofoo
? Sim, então a condição corresponde.- Não há ações associadas a essa condição, portanto, execute a ação padrão, que é imprimir o caminho.
- O caminho é um diretório? Sim, então atravesse-a. Enumere as entradas em
/tmp/foo
e, para cada entrada, execute o processo de percurso.- O diretório está vazio: não contém nenhuma entrada diferente de
.
e..
, quefind
não percorre recursivamente. Então o trabalho está terminado.
- O diretório está vazio: não contém nenhuma entrada diferente de
- O nome base (
Acontece que .
e /tmp/foo
são o mesmo diretório, mas isso não é suficiente para garantir que find
tenha o mesmo comportamento em ambos. O comando find
tem maneiras de distinguir entre caminhos para o mesmo arquivo; o predicado -name
é um deles. find /tmp/foo -name foo
corresponde ao diretório inicial, bem como a qualquer arquivo abaixo dele, chamado foo
. find . -name .
corresponde apenas ao diretório inicial ( .
nunca pode ser encontrado durante uma travessia recursiva).