Sysop.Fr
Catégories

apache

awk

bash

charmap

date

echo

encoding

find

grep

hexdump

irc

iso3166

ls

mysql

od

openssh

printf

python

read

sed

seq

smpp

sort/uniq

tar

tr

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" OU ".csv" dans le répertoire /tmp
find /tmp -type f \( -name "*.txt" -o -name "*.csv" \) -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 PLUS de 30 jours, dont le nom contient "select" et les supprimer répertoire /tmp
find /tmp -type f -mtime +30 -name "*select*" -print0 |xargs -r0 -I {} rm -fv {}
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
Recherche des fichiers dont la taille est supérieur à 500Mo du répertoire /opt/appdata ET dans les sous-répertoires
find /opt/appdata -type f -size +500000k -print0 |xargs -r0 ls -l