Encontre um arquivo por nome usando a linha de comando

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 stderrs 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 pesquisa
  • f 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
  • o *s no Termo de pesquisa podem ser omitidos se você não quiser os curingas na pesquisa

Uma 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.

bater

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

Perl

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

Jiboia

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.