Rechercher des fichiers

Objectifs

  • Savoir utiliser la commande locate

  • Savoir utiliser la commande find

locate et find

Il y a des centaines de milliers de fichiers sur une distribution Linux classique. Il peut être difficile de s'y retrouver. locate et find permettent de s'y retrouver.

locate recherche des fichiers à partir d'une base de données du contenu de l'arborescence pré-remplie

find recherche des fichiers dans l'arborescence directement, éventuellement avec des filtres précis.

La commande locate

locate motif recherche le motif dans la base de données /var/lib/mlocate/mlocate.db. Si locate ne renvoie rien :

  • rien n'a été trouvé

  • la base de données est vide

1
$ locate issue
2
/etc/issue
3
/etc/issue.net
4
[...]

MéthodeInitialiser la base de données pour locate

La commande updatedb permet d'initialiser la base de données utilisée par locate. Il faut l'exécuter en utilisateur root avec la commande sudo.

1
$ sudo updatedb

La base données n'est pas mise à jour en temps réel, mais elle est régulièrement mise à jour par le système.

La commande find

find recherche dans un dossier donné tous les fichiers qu'il contient en fonction de critères de recherches spécifiques. On peut filtrer la recherche :

  • par nom de fichier,

  • par taille,

  • par date de modification,

  • par type,

  • et par bien d'autres critères listés dans le manuel (man find).

Il suffit de préciser le point de départ de la recherche et ce qu'on cherche.

1
$ find . -name "chats*"
2
./chats
3
./chats/chats.jpg

Ici on recherche dans le répertoire courant et tous ses sous-répertoires les fichiers et répertoires dont le nom débute par « chats ».

1
$ find . -name "chats*" -type d
2
./chats

Ici on recherche tous les fichiers de type "répertoire" (d, pour directory en anglais) qui de plus commencent par le mot « chats ».

ComplémentExécution de commandes par find

find permet d'exécuter une commande sur chaque fichier trouvé avec l'option -exec.

1
$ find . -name "photo*" -exec cp {} {}.bak \;
  • cp est la commande exécutée

  • {} est remplacé par le nom du fichier trouvé

  • \; indique la fin de la commande.

Ici, on crée une copie de chaque fichier trouvé en ajoutant .bak au nom de fichier.