Como uso o comando localizar dentro de um diretório especificado?

16

Estou usando o locatecomando no Linux. Meu uso atual dele pesquisa por todo o sistema de arquivos. Eu só quero que ele procure dentro de um diretório específico. Como posso fazer isso?

telnet
fonte
TLDR: Aqui está um apelido de terminal para fazer a locatepesquisa em um diretório especificado: Quando alias my_locate="updatedb -U /path/to/yourdir -o /path/to/your_dir_locate.db; locate -d /path/to/dir_locate.db " o apelido estiver em vigor, digite o tipo de terminal my_locate *foo*e você estará pronto para as corridas. Você pode concatenar as atualizações do banco de dados e localizar a pesquisa usando o caractere de dois pontos para concaturar os bancos de dados. rtfm: linux.die.net/man/8/updatedb
Eric Leschinski

Respostas:

11

Outra abordagem seria usar a correspondência de padrões em locate:

locate '/some/directory/*filename*'

Compare a saída dos comandos abaixo:

$ locate tmpfile
/usr/lib64/perl5/auto/POSIX/tmpfile.al
/usr/share/man/fr/man3/tmpfile.3.gz
/usr/share/man/ja/man3/tmpfile.3.gz
/usr/share/man/man3/tmpfile.3.gz
/usr/share/man/man3p/tmpfile.3p.gz
$
$ locate '/usr/lib64/*tmpfile*'
/usr/lib64/perl5/auto/POSIX/tmpfile.al
$ 

locate /usr/lib*tmpfile* dá o mesmo resultado.

Paweł Brodacki
fonte
3
+1 Esta é a resposta correta. Observe que, se você incluir o curinga, os limites se tornarão fixos. Isso está no exemplo acima, $ locate '/usr/lib64/*tmpfile'não retornará resultados.
xofer 21/09/11
Se você quiser mais controle do que wildcards simples podem oferecer, você sempre pode canalizar os resultados do locatemeio grep.
Ladadadada
5

Crie um banco de dados slocate para seu diretório específico com:

updatedb -U /path/to/directory

e pesquise com:

locate <search_string>

ATUALIZAR

Isso funciona bem no meu sistema Gentoo, mas o CentOS não inclui a -Uopção. Então, você pode tentar abaixo:

Crie o banco de dados com:

# updatedb -U /path/to/dir -o dir_locate.db

e pesquise:

# locate -d dir_locate.db <search_string>
quanta
fonte
3
"localizar -U" gera um erro de opção inválida ... Acho que você quis dizer "atualizadob -U"? Também é bom observar que isso requer uma reconstrução do mlocate.db (updatedb) se você quiser procurar outro diretório.
gharper
Oh, no meu Gentoo funciona bem, mas o CentOS não inclui essa opção.
quanta
Down vote? Você poderia deixar um comentário?
quanta de
Se você tiver um erro como :,updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permitted verifique como usar o comando updatedb como um usuário comum no linux .
kenorb
2

A resposta mais simples que consigo pensar é

locate search_term | grep "/specified/directory"

A melhor solução pode ser usar "find" e suas opções de caminho ...

gharper
fonte
0

A maneira mais fácil é como no exemplo a seguir:

updatedb -o ~/tmp.db -l0 -U $PWD
locate   -d ~/tmp.db "foo"

Mude $PWDpara o seu diretório específico.

O exemplo acima criará seu banco de dados local apenas para o diretório específico.

kenorb
fonte