Subsections

find

find est une des commandes les plus complètes des utilitaires GNU. Elle permet de rechercher récursivement des fichiers à partir de conditions sur leur nom, leur type, leur date de création, etc...

Elle permet également d'exécuter n'importe quelle autre commande sur l'ensemble des réponses qui correspondent aux critères.

Exemples

Recherche sur le nom de fichier :

La recherche est toujours récursive. Une option -depth permet de gérer la profondeur de cette recherche dans les dossiers et sous-dossiers.

$ ls -l
-rw-r----- 1 gauvain gauvain 112007 2009-05-02 02:18 tata
-rw-r----- 1 gauvain gauvain    251 2009-05-02 02:09 toto
drwxr-x--- 2 gauvain gauvain   4096 2009-05-02 02:19 toto-dir

$ ls -l toto-dir
-rw-r----- 1 gauvain gauvain 12807 2009-05-02 02:21 toto
-rw-r----- 1 gauvain gauvain  5467 2009-05-02 02:19 toto2
-rw-r----- 1 gauvain gauvain   789 2009-05-02 02:19 tutu

$ find . -name toto
./toto-dir/toto
./toto

Recherche avec une expression régulière :

$ find . -regex .*toto.*
./toto-dir
./toto-dir/tutu
./toto-dir/toto
./toto-dir/toto2
./toto
Remarquez que le fichier "tutu" est renvoyé car le mot "toto" se trouve dans son chemin (dans le nom du répertoire "toto-dir" qui le contient).

Recherche sur le type de fichier :

L'option -type prend en argument une lettre définissant le type de fichier (liste non exhaustive) :

f
définit un fichier
d
définit un dossier
l
définit un lien symbolique

$ find . -regex .*toto.* -type d
./toto-dir

Recherche sur la taille :

L'option -size permet de définir selon quel critère de taille la recherche doit être faite. Son argument commence par + ou texttt- (plus ou moins grand que), est suivi de la taille (c=octets, k=Ko, M=Mo, G=Go).

$ find . -regex .*t.*t.* -size +12000c
./toto-dir/toto
./tata

Exécuter une commande sur la liste des réponses :

$ find . -name toto -type f -exec mv {} {}_NEW \;
-rw-r----- 1 gauvain gauvain 112007 2009-05-02 02:18 tata
-rw-r----- 1 gauvain gauvain    251 2009-05-02 02:09 toto_NEW
drwxr-x--- 2 gauvain gauvain   4096 2009-05-02 02:19 toto-dir
$ ls -l toto-dir
-rw-r----- 1 gauvain gauvain 12807 2009-05-02 02:21 toto_NEW
-rw-r----- 1 gauvain gauvain  5467 2009-05-02 02:19 toto2
-rw-r----- 1 gauvain gauvain   789 2009-05-02 02:19 tutu
Pour chaque réponse qui correspond aux critères, l'option -exec permet de lancer la commande mv. Dans cette sous-commande, {} remplace le nom du fichier renvoyé par find. Il faut terminer la sous-commande par \;.

Gauvain Pocentek 2009-07-08