Gostaria de determinar a localização de um arquivo usando a linha de comando. Eu tenho tentado:
find . -type f -name "postgis-2.0.0"
e
locate postgis-2.0.0
sem sucesso. Qual é o comando para determinar o diretório do arquivo, desde que seu nome?
Gostaria de determinar a localização de um arquivo usando a linha de comando. Eu tenho tentado:
find . -type f -name "postgis-2.0.0"
e
locate postgis-2.0.0
sem sucesso. Qual é o comando para determinar o diretório do arquivo, desde que seu nome?
Tentar find ~/ -type f -name "postgis-2.0.0"
Sim.
Mear .
só irá procurar o diretório atual. ~/
irá pesquisar todo o seu diretório inicial (provavelmente para onde você o baixou). Se você usou wget
como root, é possível que esteja em outro lugar para que você possa usar /
para pesquisar todo o sistema de arquivos.
Goodluck
Eu tentaria:
sudo find / -type d -name "postgis-2.0.0"
O. significa pesquisar apenas no diretório atual, é melhor pesquisar tudo, desde o root, se você realmente não sabe. Além disso, type-f significa procurar arquivos, não pastas. Alar sudo
permite pesquisar em todas as pastas / subpastas.
Sua sintaxe para locate
está correto, mas você pode ter que correr
sudo updatedb
primeiro. Por qualquer motivo, eu nunca tenho boa sorte com locate
embora.
locate
usa banco de dados de arquivos e diretórios feitos por updatedb
. Portanto, se você baixou um novo arquivo, há mais chances de que seu updatedb
não atualizou o banco de dados de arquivos e diretórios. Você pode usar sudo updatedb
antes de usar locate
utilitario.updatedb
geralmente é executado uma vez por dia sozinho em sistemas linux.
As outras respostas são boas, mas acho omitindo Permission denied
declarações me dá respostas mais claras (omite stderr
s devido a não correr sudo
):
find / -type f -iname "*postgis-2.0.0*" 2>/dev/null
onde:
/
pode ser substituído pelo diretório no qual você deseja iniciar sua pesquisaf
pode ser substituído por d
se você estiver procurando por um diretório em vez de um arquivo-iname
pode ser substituído por -name
se você quiser que a pesquisa diferencie maiúsculas de minúsculas*
s no Termo de pesquisa podem ser omitidos se você não quiser os curingas na pesquisaUma alternativa é:
find / -type f 2>/dev/null | grep "postgis-2.0.0"
Desta forma, retorna resultados se o termo de pesquisa corresponder a qualquer lugar no caminho completo do arquivo, por exemplo. /home/postgis-2.0.0/docs/Readme.txt
find é uma das ferramentas Linux/Unix mais úteis.
Tentar find . -type d | grep DIRNAME
Tentar find . -name "*file_name*"
onde você pode mudar'.'(olhe para o diretório atual) para '/'(olhe para todo o sistema) ou '~/'(olhe para o diretório inicial).
onde você pode alterar"- name "para" - iname " se não quiser diferenciar maiúsculas de minúsculas.
onde você pode mudar "nome"(um arquivo que pode começar e terminar com o que quer que seja) para o nome exato do arquivo.
Isso deve simplificar a localização do arquivo:
Isso lhe daria o caminho completo para o arquivo
tree -f / | grep postgis-2.0.0
Árvore lista o conteúdo dos diretórios em um formato semelhante a uma árvore. o -f
diz árvore para dar o caminho completo para o arquivo. como não temos ideia de sua localização ou localização pai, é bom pesquisar na raiz do sistema de arquivos /
recursivamente para baixo.Em seguida, enviamos a saída para grep para destacar nossa palavra, postgis-2.0.0
Enquanto find
o comando é a maneira mais simples de percorrer recursivamente a árvore de diretórios, existem outras maneiras e, em particular, as duas linguagens de script que vêm com o Ubuntu por padrão já têm a capacidade de fazê-lo.
bash
tem um muito bom globstar
opção shell, que permite a travessia recursiva da árvore de diretórios. Tudo o que precisamos fazer é testar se o item no ./**/*
expansão é um arquivo e se ele contém o texto desejado:
bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done ./testdir/texts/postgis-2.0.0
O Perl possui o módulo Find, que permite realizar a travessia recursiva da árvore de diretórios e, via sub-rotina, realizar ações específicas sobre eles. Com um pequeno script, você pode percorrer a árvore de diretórios, enviar arquivos que contêm a string desejada para a matriz e imprimi-la assim:
#!/usr/bin/env perluse strict;use warnings;use File::Find;my @wanted_files;find( sub{ -f $_ && $_ =~ $ARGV[0] && push @wanted_files,$File::Find::name }, ".");foreach(@wanted_files){ print "$_\n"}
E como funciona:
$ ./find_file.pl "postgis-2.0.0" ./testdir/texts/postgis-2.0.0
Python é outra linguagem de script usada amplamente No mundo Ubuntu. Em particular, tem os.walk()
módulo que nos permite executar a mesma ação que acima-atravessar a árvore de diretórios e obter a lista de arquivos que contêm a string desejada.
Como One-liner isso pode ser feito assim:
$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])' ['./testdir/texts/postgis-2.0.0']
O script completo ficaria assim:
#!/usr/bin/env pythonimport os;for r,s,f in os.walk("."): for i in f: if "postgis-2.0.0" in i: print(os.path.join(r,i))
$ find . -type f | grep IMG_20171225_*
Implemento./03-05--2018/IMG_20171225_200513.jpg
O ponto após o comando find
é indicar um ponto de partida,
Daí - a pasta atual,
"canalizado "(=filtrado) através do filtro de nome IMG_20171225_*
o comando locate 'está bem, basta atualizar o locatedb primeiro, usando o comando' updatedb
Se já estiver instalado, o novo nome de arquivo pode não ser mais ‘postgis-2.0.0’. Normalmente, após instalações via Gerenciadores de pacotes, os executáveis estariam em uma das pastas $PATH
, tente qual postgis
para ver o local. Se não retornar nada, só então você deve procurar manualmente o local do arquivo.