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?


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.


@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


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

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 -!


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.