Sysop.Fr
Cat├ęgories

apache

awk

bash

charmap

date

echo

encoding

find

grep

hexdump

irc

iso3166

ls

mysql

printf

python

read

sed

seq

smpp

sort

tar

ucp

Articles

Mémo de la commande find

La commande find permet de retrouver des noms de fichiers à partir de certains critères.
Lors du message d'erreur "Too many files" de la commande ls, la commande find peut être utilisée.

1. Syntaxe

find <répertoire de recherche> <critères de recherche> [commande]

Le répertoire de recherche sera le point de départ de la recherche.
La recherche sera éxécutée dans tous les sous-répertoires.
Les critères les plus utilisés sont:
-name
recherche sur le nom du fichier
-type
recherche sur le type (d=répertoire, c=caractère, f=fichier normal)
-size
recherche sur la taille du fichier en nombre de blocs (1 bloc=512octets)
-mtime
recherche par date de dernière modification (en jours) du fichier
-mmin
recherche par date de dernière modification (en minutes) du fichier
-maxdepth x
recherche sur x niveaux de l'arborescence

Les commandes les plus utilisées sont:
-ls
Affiche le détail des fichiers trouvés
-exec
Execute une commande pour chaque occurrence trouvée.
La commande exécutée par -exec doit se terminer par un « ; ». Ce caractère spécial doit s'écrire \; pour ne pas être interprété par le shell
Pour passer comme paramètre à la commande le fichier trouvé par find, il faut écrire {} (substitution du fichier)
-print0

2. Exemples

Recherche des fichiers dont l'extension est ".txt" dans le répertoire /tmp
find /tmp -type f -name "*.txt" -print
Recherche des fichiers dont l'extension est ".txt" dans le répertoire /tmp en affichant les détails des fichiers
find /tmp -type f -name "*.txt" -print0 |xargs -r0 ls -l
find /tmp -type f -name "*.txt" -ls -print
Recherche des fichiers dont l'extension est ".txt" dans le répertoire courant en créant un fichier tar
find . -type f -name "*.txt" -print0 |xargs -r0 tar rvf fichers.tar
find . -type f -name "*.txt" -exec tar rvf fichers.tar \;
Recherche des fichiers dont l'extension N'EST PAS ".gz" dans le répertoire courant pour les compresser
find . \! -name "*.gz" -print0 |xargs -r0 gzip
find . \! -name "*.gz" -exec gzip {} \;
Recherche des fichiers dont l'extension est ".txt" dans le répertoire /tmp et contenant la chaine "warning" ou "WARNING"
find /tmp -type f -name "*.txt" -print0 |xargs -r0 grep -il "warning"
find /tmp -type f -name "*.txt" -exec grep -il "warning"
Recherche des fichiers ayant été modifiés il y a 2 heures et les déplacer dans le répertoire /backup
find /tmp -type f -mmin 120 -print0 |xargs -r0 -I {} mv -v {} /backup
find /tmp -type f -mmin 120 -exec mv -v {} /backup \;
Recherche des fichiers ayant été modifiés il y a 3 jours et les déplacer dans le répertoire /backup
find /tmp -type f -mtime 3 -print0 |xargs -r0 -I {} mv -v {} /backup
find /tmp -type f -mtime 3 -exec mv -v {} /backup \;
Recherche des fichiers n'ayant PAS été modifiés il y a 3 jours et les déplacer dans le répertoire /backup
find /tmp -type f ! -mtime 3 -print0 |xargs -r0 -I {} mv -v {} /backup
Recherche des fichiers ayant été modifiés il y a PLUS de 3 jours et les déplacer dans le répertoire /backup
find /tmp -type f -mtime +3 -print0 |xargs -r0 ls -l |wc -l
find /tmp -type f -mtime +3 -print0 |xargs -r0 ls -l
find /tmp -type f -mtime +3 -print0 |xargs -r0 -I {} mv -v {} /backup
Recherche des fichiers ayant été modifiés il y a MOINS de 3 jours et les déplacer dans le répertoire /backup
find /tmp -type f -mtime -3 -print0 |xargs -r0 ls -l |wc -l
find /tmp -type f -mtime -3 -print0 |xargs -r0 ls -l
find /tmp -type f -mtime -3 -print0 |xargs -r0 -I {} mv -v {} /backup
Recherche des fichiers dont la taille est supérieur à 1Mo (2000 x 512 blocs) du répertoire /tmp mais pas dans les sous-répertoires
find /tmp -maxdepth 1 -type f -size +2000 -print0 |xargs -r0 ls -l