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. Masfindnã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.., quefindnã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/fooe, para cada entrada, execute o processo de percurso.- O diretório está vazio: não contém nenhuma entrada diferente de
.e.., quefindnã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).