-print
garantirá que o nome do caminho atual seja impresso na saída padrão. Alguns sinalizadores desativam a impressão padrão de nomes de caminho ( -exec
, por exemplo).
-depth
causará uma passagem em profundidade da hierarquia de arquivos, para que os nomes de caminhos nos diretórios sem subdiretórios sejam tratados primeiro (de baixo para cima e não de cima para baixo). No seu exemplo, faz pouca diferença ao trabalhar no diretório sem subdiretórios, mas observe que .
é reportado após os outros nomes de caminho quando você usa -depth
(isso é porque .
é o diretório mais importante a ser pesquisado, portanto, seu nome de caminho é tratado por último com -depth
e primeiro sem -depth
).
É útil usar -depth
se um estiver excluindo diretórios com find
, pois você obterá erros ao tentar acessar diretórios já excluídos sem ele.
Como Scott aponta nos comentários abaixo, você definitivamente precisa de -depth
quando renomeia diretórios também, ou você potencialmente não seria capaz de percorrer a estrutura de diretórios em ao mesmo tempo que você está renomeando diretórios nele.
O sinalizador -delete
ativa -depth
por padrão.
Exemplo: Exclua todos os diretórios abaixo do diretório atual cujos nomes correspondam a *deleteme
(por exemplo, folder-deleteme
) e imprima os caminhos para os diretórios excluídos com êxito:
find . -depth -type d -name '*deleteme' -exec rm -rf {} ';' -print
Dada a seguinte estrutura de diretório,
$ tree
.
'-- folder-deleteme
'-- another-deleteme
'-- evenmore-deleteme
3 directories, 0 file
executar o comando find
acima sem -depth
resultaria em
$ find . -type d -name '*deleteme' -exec rm -rf {} ';' -print
./folder-deleteme
find: ./folder-deleteme: No such file or directory
porque find
exclui o diretório mais alto folder-deleteme
(e imprime seu caminho) e, em seguida, tenta inseri-lo para procurar mais diretórios para excluir.
Além disso:
$ find .
.
./folder-deleteme
./folder-deleteme/another-deleteme
./folder-deleteme/another-deleteme/evenmore-deleteme
$ find . -depth
./folder-deleteme/another-deleteme/evenmore-deleteme
./folder-deleteme/another-deleteme
./folder-deleteme
.