Como encontrar um arquivo de qualquer diretório

Como encontrar um arquivo de qualquer diretório

Estou tentando procurar um arquivo chamadoLivro1.

No meu teste estou tentando procurar o arquivo citado e neste teste não sei onde esse arquivo está localizado.

Eu tentei find / -iname book1, mas não há saída.

Como encontro meu arquivo chamado book1 usando a linha de comando se não sei onde o arquivo está localizado?

EDITAR:

Meu cenário é descrito com mais detalhes abaixo:

  1. A extensão do arquivo é desconhecida
  2. O nome exato (ou seja, letras maiúsculas, números, etc.) é desconhecido
  3. A localização do arquivo é desconhecida

Responder1

Primeiro, um argumento para -inameé um shellpadrão. Você pode ler mais sobre padrões emManual do Bash. A essência é que, para findrealmenteencontrarum arquivo, o nome do arquivo deve corresponder ao padrão especificado. Para fazer uma book1correspondência de string sem distinção entre maiúsculas e minúsculas Book1.gnumeric, você deve adicionar *para que fique assim:

find / -iname 'book1*'

ou especifique o nome completo:

find / -iname 'Book1.gnumeric'

Em segundo lugar, -inamefará com que findignore o caso do nome do arquivo, portanto, se você especificá-lo, -iname book1também poderá encontrar Book1, bOok1etc. Se tiver certeza de que o arquivo que está procurando é chamado, Book1.gnumeric não use -inamemas -name, será mais rápido:

find / -name 'Book1.gnumeric'

Terceiro, lembre-se de citar o padrão conforme dito nooutra resposta.

E por último - você tem certeza de que deseja procurar o arquivo em todos os lugaresno seu sistema? É possível que o arquivo que você está procurando esteja realmente em seu $HOMEdiretório se você trabalhou nele ou baixou-o de algum lugar. Novamente, isso pode ser muito mais rápido.

EDITAR:

Percebi que você editou sua pergunta. Se você não sabe o nome completo do arquivo, letras maiúsculas e localização, você deve usar algo assim:

find / -iname 'book1*'

Sugiro também colocar 2>/dev/nullno final da linha para ocultar todos *permission denied*e outros erros que estarão presentes se você invocar findcomo usuário não root:

find / -iname 'book1*' 2>/dev/null

E se você tiver certeza de que está procurando por um único arquivo e houver apenas um único arquivo em seu sistema que corresponda aos critérios, você pode dizer findpara sair depois de encontrar o primeiro arquivo correspondente:

find / -iname 'book1*' -print -quit 2>/dev/null

Responder2

Você pode tentar o locatecomando. Ele usa um banco de dados de nomes de arquivos para tornar a pesquisa mais rápida.

Para pesquisar todas as correspondências de arquivos *book1*e ignorar maiúsculas e minúsculas, você pode usar

locate -i book1

se você quiser procurar arquivosiniciandocom book1você precisará fazer o curinga você mesmo:

locate -i 'book1*'

É muito mais rápido que o find, mas está tão atualizado quanto a última vez que o banco de dados foi atualizado.

Responder3

Se você sabe que tem um arquivo chamado book1.something, onde a localização do arquivo, o valor exato de somethinge o padrão de letras maiúsculas do nome do arquivo são todos desconhecidos:

find / -iname 'book1.*'

Se tudo o que você sabe com certeza é que o nome do arquivo contém a palavra book, você pode gerar uma lista provavelmente muito maior com

find / -iname '*book*'

O argumento para -nameé um padrão shell glob. No diretório em que o arquivo está, compare:

$ ls Book1
ls: cannot access 'Book1': No such file or directory
$ ls Book1.*
Book1.gnumeric

Isso representa o tipo de pesquisa realizada por -name. A -inameopção simplesmente permite uma versão que não diferencia maiúsculas de minúsculas.

Responder4

Com Zsh você pode usar padrões glob, então isso também funciona:

ls -a /**/book1

Isso encontrará todos os locais onde book1reside um arquivo chamado.

Nos meus testes, isso parece ser mais rápido que usar finde também produz pouco ou nenhumerros de permissão do usuárioquando executado sem permissão de root

Vermanual.

informação relacionada