Comment utiliser la commande Locate dans un répertoire spécifié?


16

J'utilise la locatecommande sous Linux. Mon utilisation actuelle de celui-ci recherche dans tout le système de fichiers. Je veux seulement qu'il recherche dans un répertoire spécifique. Comment puis-je faire ceci?


TLDR: Voici un alias de terminal pour effectuer une locaterecherche dans un répertoire spécifié: alias my_locate="updatedb -U /path/to/yourdir -o /path/to/your_dir_locate.db; locate -d /path/to/dir_locate.db " Une fois l'alias effectif, sur le type de terminal my_locate *foo*et c'est parti pour les courses. Vous pouvez concaténer des mises à jour de base de données et localiser la recherche en utilisant le caractère deux-points pour concaténer des bases de données. rtfm: linux.die.net/man/8/updatedb
Eric Leschinski

Réponses:


11

Une autre approche serait d'utiliser la correspondance de motifs dans locate:

locate '/some/directory/*filename*'

Comparez la sortie des commandes ci-dessous:

$ 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* donne le même résultat.


3
+1 C'est la bonne réponse. Notez que si vous incluez le caractère générique, les limites deviennent fixes. C'est dans l'exemple ci-dessus, $ locate '/usr/lib64/*tmpfile'ne retournera aucun résultat.
xofer

Si vous voulez plus de contrôle que les simples caractères génériques, vous pouvez toujours diriger les résultats de locatethrough grep.
Ladadadada

5

Créez une base de données slocate pour votre répertoire spécifique avec:

updatedb -U /path/to/directory

et recherchez avec:

locate <search_string>

MISE À JOUR

Cela fonctionne bien sur mon système Gentoo mais CentOS ne comprend pas d' -Uoption. Donc, vous pouvez essayer ci-dessous à la place:

Construisez la base de données avec:

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

et recherchez:

# locate -d dir_locate.db <search_string>

3
"Locate -U" renvoie une erreur d'option non valide ... Je suppose que vous vouliez dire "updatedb -U"? Il est également bon de noter que cela nécessite une reconstruction mlocate.db (updatedb) si vous souhaitez rechercher un autre répertoire.
gharper

Oh, sur mon Gentoo cela fonctionne bien mais CentOS n'inclut pas cette option.
quanta

Vote contre? Pourriez-vous s'il vous plaît laisser un commentaire?
quanta

Si vous avez une erreur comme :,updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permitted vérifiez comment utiliser la commande updatedb en tant qu'utilisateur ordinaire sur Linux .
kenorb

2

La réponse la plus simple à laquelle je peux penser est

locate search_term | grep "/specified/directory"

La meilleure solution pourrait être d'utiliser "find" et ses options de chemin ...


0

La manière la plus simple est comme dans l'exemple suivant:

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

Accédez $PWDà votre répertoire spécifique.

L'exemple ci-dessus créera votre base de données locale uniquement pour le répertoire spécifique.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.