Commandes de base

find : rechercher et bien plus ....

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

find



Introduction



find est un outil de recherche disposant d'un grand nombre d'options. Cette commande peut également enchaîner des actions sur le résultat des recherches et utiliser des expressions régulières comme motifs de recherche

Utilisation



Utilisation de base



Pour rechercher un fichier, par son nom :

Code BASH :
find <emplacement> -name "<nom fichier>" -print



Exemple :

Code BASH :
find /usr -name "trash.svg" -print


Résultat :
Code :
/usr/share/themes/adriend-light/cinnamon/trash.svg


Attention, l'option -name est sensible à la casse. Pour pallier à cela, utiliser l'option -iname :

Code BASH :
find /usr -iname "TRASH.svg" -print


Résultat :
Code :
/usr/share/themes/adriend-light/cinnamon/trash.svg



Si on ne connaît pas le nom exact du fichier, on peut donner une partie de son nom. Les jockers * (un ou plusieurs caractères) et ? (un caractère) sont utilisables :


Code BASH :
 find /usr -iname "tra?h.*" -print


Résultat :
Code :
/usr/share/gvfs/mounts/trash.mount
/usr/share/themes/adriend-light/cinnamon/trash.svg
/usr/share/cinnamon-control-center/sounds/trash.oga



Éviter les erreurs



Si on n'a pas les droits root, et qu'on cherche dans une zone où se trouvent des fichiers que nous ne pouvons lire, la console peut se retrouvée inondée de messages "Permission denied" :

Code BASH :
find . -name "samba" -print


Résultat :
Code :

find: ‘./audit’: Permission denied
find: ‘./lightdm/.config’: Permission denied
find: ‘./lightdm/.cache’: Permission denied
find: ‘./lightdm/.dbus’: Permission denied
find: ‘./speech-dispatcher’: Permission denied
find: ‘./pluto/peer’: Permission denied
find: ‘./httpd’: Permission denied
find: ‘./libvirt’: Permission denied
find: ‘./mariadb’: Permission denied
./samba
find: ‘./samba’: Permission denied
find: ‘./sssd’: Permission denied
find: ‘./ppp’: Permission denied



Ajouter en fin de commande 2> /dev/null qui va rediriger la sortie d'erreurs (stderr) sur /dev/null (c'est à dire rien).


Code BASH :
adrien@linux: /var/log  $ find . -name "samba" -print 2> /dev/null


Résultat :
Code :
./samba



Utilisation avancée



Recherche par type de « fichier »



L'option -type nous permet de chercher par type d'élément : f pour fichier, d pour répertoire.


Exemple : chercher les fichiers dont le nom contient sm


Code BASH :
 find /var/log/ -type f -name "*sm*"


Résultat :
Code :
/var/log/samba/log.smbd
/var/log/samba/smbd.log
/var/log/samba/old/log.smbd-20140223
/var/log/samba/old/smbd.log-20140303
/var/log/samba/old/log.smbd-20140316
/var/log/samba/old/log.smbd-20140309
/var/log/samba/old/log.smbd-20140303
/var/log/samba/old/smbd.log-20140309
/var/log/samba/old/smbd.log-20140316
/var/log/samba/old/smbd.log-20140223



Exemple : chercher les répertoires dont le nom contient sm

Code BASH :
 find /var/log/ -type d -name "*sm*"


Résultat :
Code :
/var/log/samba/cores/smbd


Recherche par taille



L'option -size nous permet de chercher par la taille du fichier.

Exemple : chercher les fichiers de plus de 10Mo dans /usr/bin


Code BASH :
 find /usr/bin -size +10M


Résultat :
Code :
/usr/bin/fgfs
/usr/bin/inkscape
/usr/bin/clementine



Recherche par date d'accès



L'option -atime nous permet de chercher par la dernière date d'accès du fichier.

Exemple : chercher les fichiers dans /var/log/samba qui ont été accédés il y a moins de 1 jour (donc aujourd'hui) :

Code BASH :
 find /var/log/samba/ -atime -1


Résultat :
Code :
/var/log/samba/
/var/log/samba/10.6.0.38.log
/var/log/samba/10.5.26.125.log
/var/log/samba/cores
/var/log/samba/cores/smbd
/var/log/samba/cores/nmbd
/var/log/samba/10.5.150.125.log
/var/log/samba/10.5.2.213.log
/var/log/samba/10.5.0.125.log
/var/log/samba/old
/var/log/samba/pc-02-13.log



Exemple : chercher les fichiers dans /var/log/samba qui ont été accédés il y a plus de 90 jours :

Code BASH :
 find /var/log/samba/ -atime +90 


Résultat :
Code :
/var/log/samba/192.168.1.30.log
/var/log/samba/calvin.log
/var/log/samba/192.168.1.27.log
/var/log/samba/10.6.0.36.log
/var/log/samba/log.127.0.0.1
/var/log/samba/adrien-xp.log
/var/log/samba/10.5.0.14.log
/var/log/samba/pcportable.log
/var/log/samba/10.5.0.25.log
/var/log/samba/sim.log



Exemple : chercher les fichiers dans /var/log/samba qui ont été accédés il y a exactement de 30 jours :

Code BASH :
find /var/log/samba/ -atime 30


Résultat :
Code :
/var/log/samba/liberto.log
/var/log/samba/10.5.0.10.log



A noter qu'il existe des arguments de même genre à savoir :
-atime : date d'accès
-ctime : date de création
-mtime : date de modification
Ces 3 arguments attendent une valeur numérique correspondant à des jours.

Nous avons aussi
-amin
-cmin
-mmin

Qui correspondent respectivement aux dates d'accès, de création et de modifications qui attendent une valeur numérique correspondant à des minutes.


Rechercher par UID



L'option -uid nous permet de chercher les fichiers de l'utilisateur par son UID.

Exemple : chercher les fichiers dans /tmp de l'utilisateur dont l'UID est 1000 :

Code BASH :
find /tmp -uid 1000


Résultat :
Code :
/tmp/clementine-art-w12552.jpg
/tmp/clementine-art-T12552.jpg
/tmp/qtsingleapp-clemen-d211-3e8
/tmp/qtsingleapp-clemen-d211-3e8-lockfile
/tmp/.esd-1000
/tmp/.esd-1000/socket
/tmp/ssh-GNTlMKivGCot
/tmp/ssh-GNTlMKivGCot/agent.11426
/tmp/qtsingleapp-clemen-d211-1f4-lockfile
/tmp/.esd-500
/tmp/.ICE-unix/11426



Il existe la même option avec gid pour le numéro du groupe (GID)


Appeler une commande




Sur tous les fichiers trouvés par find, je veux appliquer une commande, on va utiliser l'option -exec.

Exemple : tous les fichiers dont d'UID de l'utilisateur est 500, je veux effectuer un chown pour changer son utilisateur :

Code BASH :
find / -uid 500 -exec chown adrien {} \;



  • cette commande ne doit pas être entre guillemets, accolades ou $() ;
  • le nom du fichier trouvé est identifié par {}
  • la fin de la commande doit être \;



Lister les dossiers où tout le monde peut écrire



Code BASH :
find / -type d -perm -002 -exec ls -ld {} \;