find -maxdepth 0 não me retorna nenhuma saída

17

Estou tentando entender como usar a find -maxdepth 0opção.

Eu tenho a estrutura de diretórios abaixo.

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

Agora, eu executo meu findcomando como abaixo.

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

Com nenhum dos findcomandos acima , o arquivo1 é retornado.

Na página do manual find, vejo as informações abaixo.

-maxdepth 0 significa aplicar apenas os testes e ações aos argumentos da linha de comandos.

Procurei alguns exemplos com a -maxdepth 0opção e não consegui encontrar nenhum exemplo adequado.

Minha findversão é

find --version
find (GNU findutils) 4.4.2

Alguém pode me fornecer algumas dicas sobre quais -maxdepth 0opções de casos seriam úteis?

EDITAR

Quando executo o comando abaixo, obtenho o arquivo1 listado duas vezes. Isso pretende funcionar dessa maneira?

find . file1 -maxdepth 1 -name "file1"
./file1
file1
Ramesh
fonte

Respostas:

24

Suponhamos que tenhamos file1no diretório atual. Então:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

Agora, vejamos o que a documentação afirma:

-maxdepth 0 significa aplicar apenas os testes e ações aos argumentos da linha de comandos.

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. No meu segundo exemplo acima, ambos .e file1estão listados na linha de comando e, por file1corresponder -name "file1", foram retornados na saída

Em outras palavras, -maxdepth 0significa não procurar diretórios ou subdiretórios. Em vez disso, procure apenas um arquivo correspondente entre os listados explicitamente na linha de comando.

Nos 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 findcomando 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

Caminhos sobrepostos

Considerar:

$ 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, findseguirá cada caminho especificado na linha de comando e procurará correspondências, mesmo que os caminhos levem ao mesmo arquivo, como em . fileou mesmo se os caminhos forem duplicatas exatas, como em file1 file1.

John1024
fonte
obrigado. Mas como eu poderia passar alguns nomes de arquivos na linha de comando?
Ramsh #
Bom ponto. Veja minha resposta atualizada. Você pode colocar quantas quiser antes do primeiro teste. Por exemplo: find * -maxdepth 0 -name "file1". A *lista de todos os arquivos no diretório atual na linha de comando.
John1024
1
@Ramesh Resposta atualizada novamente com, espero, melhores explicações e exemplos.
John1024
obrigado novamente. Atualizei minha pergunta com mais detalhes da sua atualização mais recente.
Ramsh #
@ Jamesh Não consigo encontrá-lo documentado, mas vejo o mesmo comportamento que você: findobserva cada caminho na linha de comando e relata correspondências em cada uma delas, mesmo que sejam duplicadas.
John1024