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

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

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

Eu tenho a estrutura de diretório abaixo.

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

Agora, executo meu findcomando conforme abaixo.

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

Com nenhum dos findcomandos acima,arquivo1é devolvido.

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

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

Procurei alguns exemplos com -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, recebo oarquivo1sendo listado duas vezes. A intenção é que funcione dessa maneira?

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

Responder1

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

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

Agora, vamos ver o quea documentaçãoafirma:

-maxdepth 0 significa apenas aplicar 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. Desde.não tem o nome file1, nada será listado na saída. No meu segundo exemplo acima, ambos.file1estão listados na linha de comando e, como file1correspondem -name "file1", foram retornados na saída.

Em outras palavras, -maxdepth 0os meios fazemnãopesquisar diretórios ou subdiretórios. Em vez disso, procure apenas um arquivo correspondente entre aqueles 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 nove arquivos e diretórios na linha de comando:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 -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

findseguirá cada caminho especificado na linha de comando e procurará 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.

Responder2

Se você deseja encontrar arquivos (não diretórios) de forma não recursiva dentro de um diretório, use:

find . -maxdepth 1 -type f -name "file1"
# ./file1

-maxdepth 0 não vou procurar. Ele apenas tentará corresponder os nomes de arquivos/diretórios que você forneceu como argumentos em find.

Por exemplo, na instrução acima, usando um maxdepthvalor de 0, tentaria corresponder file1ao .que não corresponde.

No entanto,passar *em vez de .em combinação com -maxdepth 0faria o bash substituir *pela lista de arquivos no diretório atual que retornaria uma correspondência.

Responder3

Uso:

John1024 deu bons exemplos,comousar -maxdepth 0, então adiciono apenas informações dequandopara usá-lo:

Bem, qual é o motivo -maxdepth 0? Se você souber o nome, você pode simplesmente emitir o comando

ls file-* 

Bem, pode não ser o nome que você está procurando.

Exemplo:

touch file-{1..3}
echo "1" > file-1
touch -d @0 file-2

find * -maxdepth 0 -name "file-*" \( -size 1k -o -mtime +10000 \) -ls 
   669266     12 -rw-rw-r--   1 stefan   stefan          2 Mai  4 20:57 file-1
   669270      8 -rw-rw-r--   1 stefan   stefan          0 Jan  1  1970 file-2

Eu crio 3 arquivos com o nome arquivo padrão-*. Então adiciono algum conteúdo ao não. 1, redefina a data para não. 2 e deixe não. 3 como está.

Agora procuro arquivos de 1k (no.1) ou idade > aproximadamente 30 anos em talvez milhares de arquivos. Por exemplo, apenas entre 3 arquivos.

Mas find * pesquisa todos os arquivos no diretório atual, daí o jargão um tanto estranho da página de manual, de "ponto de partida" em vez de apenas falar sobre diretórios. Acho que os poderosos recursos de filtro do find levaram à decisão de procurar arquivos, dos quais você sabe onde eles estão localizados (o $PWD), mas não é possível filtrar facilmente outros atributos com ferramentas de shell padrão.

informação relacionada