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.
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
$ find . -regex .*toto.* ./toto-dir ./toto-dir/tutu ./toto-dir/toto ./toto-dir/toto2 ./totoRemarquez 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).
L'option -type prend en argument une lettre définissant le type de fichier (liste non exhaustive) :
$ find . -regex .*toto.* -type d ./toto-dir
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
$ 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