Tenho a seguinte estrutura de diretório em uma máquina macOS:
dir1/
|- file1.txt
|- dir2/
|- file2.txt
|- dir3
|- file3.txt
Em seguida, executo estes dois find
comandos:
find . -depth 1 -path '*.txt'
find . -mindepth 1 -maxdepth 1 -path '*.txt'
O objetivo é pesquisar não recursivamente todos os .txt
arquivos em dir1
. Se usado em dir1
, ambos os comandos retornam file1.txt
, mas me disseram que apenas o segundo comando, com -mindepth
and -maxdepth
, é realmente correto. É realmente assim? Alguém poderia explicar a diferença?
E a segunda pergunta. Se eu precisar pesquisar recursivamente, devo remover -mindepth 1 -maxdepth 1
completamente ou remover -maxdepth 1
somente?
-depth 1
do FreeBSD é um predicado condicional que retorna verdadeiro se o arquivo atualmente considerado estiver na profundidade 1, mas não impedefind
que desça abaixo da profundidade 1.-mindepth 1
/-maxdepth 1
do GNU são predicados de opção (nafind
terminologia GNU) que afetam globalmente o comportamento defind
. Ambos sempre retornam true (e em geral você os quer no início e não precisaria depender do resultado deles ),-mindepth 1
garante que nenhum arquivo com profundidade abaixo de 1 seja selecionado/atuado-maxdepth 1
faz com quefind
não desça abaixo da profundidade 1.-depth 1
pode ser útil para executar diferentes ações dependendo da profundidade, como em:Mas para processar apenas arquivos na profundidade 1,
Ou o equivalente padrão:
É o que você quer.
-mindepth
/-maxdepth
pode ser emulado com combinações de-depth n
e-prune
, mas-mindepth
/-maxdepth
é muito mais portátil que-depth n
¹ que é FreeBSD (e derivados como macOS ou DragonFly BSD) apenas, então não faria muito sentido fazer isso.¹ Não deve ser confundido com
-depth
alone, um predicado de opção para ativar a travessia em profundidade, que é padrão.