Como encontrar um arquivo de qualquer diretório

9

Estou tentando procurar um arquivo chamado Book1 .

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

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

Como eu 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
por Aspire27 30.04.2017 / 19:29

5 respostas

15

Primeiro, um argumento para -iname é um padrão shell . Você pode ler mais sobre padrões em Bash manual . o gist é que para que find realmente encontre um arquivo filename deve corresponder ao padrão especificado. Para fazer um caso insensível string book1 match Book1.gnumeric ou você precisa adicionar * para que é assim:

find / -iname 'book1*'

ou especifique o nome completo:

find / -iname 'Book1.gnumeric'

Segundo, -iname fará com que find ignore o caso do nome do arquivo, se você especifique -iname book1 também pode encontrar Book1 , bOok1 etc. Você tem certeza de que o arquivo que está procurando é chamado Book1.gnumeric então não use -iname mas -name , será mais rápido:

find / -name 'Book1.gnumeric'

Em terceiro lugar, lembre-se de citar o padrão, como dito no outro responder .

E por último - você tem certeza de que quer procurar pelo arquivo em todos os lugares no seu sistema? É possível que o arquivo que você está procurando está na sua pasta $HOME se você trabalhou isso ou baixei de algum lugar. Mais uma vez, isso pode ser muito mais rápido.

EDITAR :

Notei que você editou sua pergunta. Se você não sabe o nome completo do arquivo, a letra maiúscula e o local, você deve usar algo assim:

find / -iname 'book1*'

Sugiro também colocar 2>/dev/null no final da linha para ocultar todos os *permission denied* e outros erros que estarão presentes se você invocar find como um usuário não raiz:

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

E se tiver certeza de que está procurando um único arquivo, e houver apenas um único arquivo no sistema correspondente os critérios que você pode dizer a find para sair depois de encontrar o primeiro arquivo correspondente:

find / -iname 'book1*' -print -quit 2>/dev/null
    
por 30.04.2017 / 19:59
5

Se você sabe que tem um arquivo chamado book1.something , onde o local do arquivo, o valor exato de something e o padrão de capitalização 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 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

Isto representa o tipo de pesquisa realizada por -name . A opção -iname simplesmente permite uma versão insensível a maiúsculas.

    
por 30.04.2017 / 19:43
5

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

Para pesquisar todos os arquivos que correspondem a *book1* e ignorar maiúsculas e minúsculas, você pode usar

locate -i book1

se você quiser procurar por arquivos iniciando com book1 você precisará fazer o curinga:

locate -i 'book1*'

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

    
por 01.05.2017 / 01:16
0

Para esses tipos de tarefas, sempre faço: find / -iregex '.*Book1.*'

Este formulário cuidaria dos 3 pontos do seu cenário ( iregex é uma expressão racional insensível a maiúsculas e o padrão com .* em ambos os lados corresponderia a qualquer caractere antes e depois de seu padrão fixo de Book1 - este poderia, obviamente, dar-lhe de volta mais resultados do que o necessário, mas você tem certeza de não perder o arquivo)

A principal diferença: se possível, seja mais restritivo do que usar apenas / , como tentar apenas /home ou algo assim, senão você irá descer em alguns diretórios que não são relevantes ( /sys , /dev , etc …)

Lembre-se, no entanto, que as permissões do Unix se aplicam: se o arquivo estiver em um diretório para o qual o usuário executando o comando find não tiver acesso (executar), find não poderá encontrá-lo.

    
por 01.05.2017 / 12:10
0

O Silver Searcher é um utilitário muito rápido e útil para procurar arquivos e conteúdo.

Para resolver o seu problema, o comando do Silver Searcher ficaria assim ...

ag -g Book1

-g PATTERN Imprimir nomes de arquivo correspondentes a PATTERN

    
por 22.10.2018 / 18:13