Como encontrar o caminho de um arquivo com base em seu nome?

22

Estou tentando encontrar um settings.xmlarquivo na minha máquina Ubuntu. Não tenho idéia de onde ele está e em qual diretório ele está.

Eu tentei usar isso -

ls -R | grep settings.xml

Mas ele não me mostra o caminho completo. Existe algum outro comando que eu preciso tentar que possa me dar o caminho completo?

SSH
fonte
4
Sempre que você acha que a solução é analisar a saída ls, você quase certamente está fazendo isso da maneira errada .
terdon

Respostas:

23

Para pesquisa rápida (mas não definitiva):

locate -br '^settings.xml$'

De man locate:

   locate  reads  one or more databases prepared by updatedb(8) and writes
   file names matching at least one of the PATTERNs  to  standard  output,
   one per line.

   -b, --basename
          Match  only  the base name against the specified patterns.  This
          is the opposite of --wholename.
   -r, --regexp REGEXP
          Search for a basic regexp REGEXP.  No PATTERNs  are  allowed  if
          this  option  is used, but this option can be specified multiple
          times.

O ^e $assegurar que apenas os arquivos cujo nome é settings.xmle não os arquivos cujos nomes contêm settings.xml serão impressos.

Você pode precisar executar pela primeira vez: updatedb(as root) para atualizar / criar o banco de dados locate.

user.dz
fonte
@terdon, você me surpreendeu, nunca pensei em olhar man locateantes !!! assumindo que é apenas uma ferramenta de pesquisa simples. Muito obrigado.
user.dz
Sim, essa foi praticamente a minha reação na primeira vez em que li a página de manual :)
terdon
4
vale a pena notar o papel de updatedbpara este comando - locatemuitas vezes falha, sem que, para mim, de qualquer maneira
rm-vanda
@ rm-vanda, atualizei a resposta para mencionar updatedb. Obrigado.
user.dz
4
locate '*/settings.xml'é provavelmente mais portátil entre as várias implementações diferentes de locate(quando disponíveis).
Stéphane Chazelas
15

Uma pesquisa lenta, mas constante, através do sistema de arquivos, mas definitiva.

find / -xdev -name settings.xml

Isso levará algum tempo e você poderá obter alguns erros de permissão, mas ele chegará lá. Se você tiver mais alguma idéia de onde ele pode estar, altere o primeiro diretório de /para/where/you/guess

X Tian
fonte
4
Anexar 2>/dev/nullao final do comando suprimirá toda a saída de erro (redirecionando o stderr para o dispositivo nulo).
Tanner Swett
2
-xdev: Não desça diretórios em outros sistemas de arquivos.
Pablo A
1

Exemplo:

$ locate settings.xml
/usr/share/mime/application/x-cisco-vpn-settings.xml
polvo
fonte
0

tree é outra boa maneira, se você não tem certeza do que está procurando, e parece ser um pouco mais rápido:

tree -f / | grep settings.xml

Outras bandeiras úteis: -ino grep ignorará o caso, -hpara legível por humanos na árvore -

- a página de manual possui muitas opções úteis -!

rm-vanda
fonte
6
Não é uma boa ideia, tree(1)mostra uma árvore de arquivos ASCII-art, que é então mutilada por grep(1).
vonbrand
1
Sim, se você for usar tree, também poderá usar o find . type -fque será mais rápido.
terdon
0

Os parâmetros -la imprimem a versão longa de ls e os diretórios também. ls-la | grep settings.xml

Eugenio F. Martinez Pacheco
fonte
2
Isso ainda não forneceria o caminho completo para o arquivo fornecido.
Kusalananda