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

  • obrigado. Mas como eu poderia passar alguns nomes de arquivo na linha de comando?
  • Bom ponto. Veja minha resposta atualizada. Você pode colocar quantos quiser antes do primeiro teste. Por exemplo: find * -maxdepth 0 -name "file1". A * listará todos os arquivos no diretório atual na linha de comando.
  • Resposta @Ramesh atualizada novamente com, espero, melhores explicações e exemplos.
  • obrigado novamente. Atualizei minha pergunta com mais detalhes de sua última atualização.
  • @Ramesh Não consigo encontrar documentado, mas vejo o mesmo comportamento que você: find olha cada um caminho na linha de comando e relata correspondências em cada um, mesmo se forem duplicados.

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *