Estou tentando entender como usar a opção find -maxdepth 0
.
Eu tenho a estrutura de diretório abaixo.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Agora, eu executo meu comando find
conforme abaixo.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Sem nenhum dos find
comandos acima, arquivo1 é retornado.
Na página de manual de find
, vejo as informações abaixo.
-maxdepth 0 significa apenas aplicar os testes e ações aos argumentos da linha de comando.
Pesquisei alguns exemplos com a opção -maxdepth 0
e não consegui encontrar nenhum exemplo adequado.
Meu find
version is,
find --version find (GNU findutils) 4.4.2
Alguém pode me fornecer algumas dicas sobre quais casos -maxdepth 0
a opção seria útil ?
EDITAR
Quando executo o comando abaixo, obtenho o file1 sendo listado duas vezes. Pretende-se que funcione desta forma?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Resposta
Vamos supor que temos file1
no diretório atual. Então :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
Agora, vamos ver o que a documentação afirma:
-maxdepth 0 significa onl y aplique os testes e ações aos argumentos da linha de comando.
No meu primeiro exemplo acima, apenas o diretório .
está listado na linha de comando. Como .
não tem o nome file1
, nada está listado na saída. Em meu segundo exemplo acima, .
e file1
estão listados na linha de comando e, porque file1
corresponde a -name "file1"
, foi retornado na saída
Em outras palavras, -maxdepth 0
significa fazer não diretórios ou subdiretórios de pesquisa. Em vez disso, procure apenas um arquivo correspondente entre aqueles explicitamente listados na linha de comando.
Em seus exemplos, apenas os diretórios foram listados na linha de comando e nenhum deles foi nomeado file1
. Portanto, nenhuma saída.
Em geral, muitos arquivos e diretórios podem ser nomeados na linha de comando. Por exemplo, aqui tentamos um comando find
com 11 arquivos e diretórios na linha de comando:
$ ls d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 $ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1" file1
Sobreposição caminhos
Considere:
$ find . file1 -maxdepth 0 -iname file1 file1 $ find . file1 file1 -maxdepth 0 -iname file1 file1 file1 $ find . file1 file1 -maxdepth 1 -iname file1 ./file1 file1 file1
Aparentemente, como Ramesh aponta, find
seguirá cada caminho especificado na linha de comando e procure correspondências, mesmo se os caminhos levarem ao mesmo arquivo, como em . file
ou mesmo se os caminhos forem duplicatas exatas, como em file1 file1
.
Comentários
Resposta
Se você deseja localizar arquivos não recursivamente (não diretórios) dentro de um diretório, use:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
não pesquisará . Ele apenas tentará corresponder entre os nomes de arquivo / diretório que você forneceu como argumentos em find
. Por exemplo. na instrução acima, usando um valor 0
, tentaria corresponder file1
a .
que não corresponde. Passar *
em vez de .
faria com que o bash substituísse *
pela lista de arquivos no diretório atual que retornaria uma correspondência.
find * -maxdepth 0 -name "file1"
. A*
listará todos os arquivos no diretório atual na linha de comando.find
olha cada um caminho na linha de comando e relata correspondências em cada um, mesmo se forem duplicados.