Les expressions en CAPITALE sont à adapter.
Trouver les fichiers modifiés récemment
Fichiers modifiés il y a moins de 24 heures
find . -mtime 0
Fichiers modifiés il y a plus de 24 heures
find . -mtime +0
Fichiers modifiés il y a moins de 10 minutes
find . -mmin -10
Fichiers modifiés entre 24 heures et 48 heures
find . -mtime 1
Fichiers modifiés il y a plus de 48 heures
find . -mtime +1
Fichiers modifiés entre 1 et 5 minutes
find . -mmin +0 -mmin -5
Trouver les fichiers ayant une permission spécifique
Par exemple, les fichiers inscriptibles par tous.find . -type f -perm -o=w
Chercher une chaîne dans tous les fichiers récursivement
find . -type f -print0 | xargs -0 -e grep -niH -e 'STRING'
Le -print0 en conjonction avec xargs -0 permet de gérer les espaces et les retour à la ligne dans les noms de fichiers. Voici la sortie du code dans le répertoire contenant cet article.
find . -type f -print0 | xargs -0 -e grep -niH -e 'supprimer' ./article.php:12:<h2>Supprimer les fichiers cachés</h2> ./article.php:15:<h2>Supprimer tous les répertoires vides</h2> ./article.php:22:<h2>Supprimer les répertoires <i>svn</i> d'un dépôt</h2>
Supprimer les fichiers cachés
find -type f -name '.*' -exec rm {} \;
Supprimer tous les répertoires vides
find . -type d -empty -print -exec rmdir -f {} \;
Supprimer les répertoires svn d'un dépôt
find PATH -type d -regex '.*\.svn' -print0 | xargs -0 rm -rf
Utiliser le « ou » dans find
find -type f \( -name "*.EXT1" -o -name "*.EXT2" \)
Remplacer une chaine dans plusieurs fichiers
Tous fichiers, sans limite de profondeur
find ./ -type f -exec sed -i 's/OLD/NEW/' {} \;
Profondeur donnée et le nom vérifie une expression rationnelle
find ./ -maxdepth PROFONDEUR -type f -name "REGEXP" -exec sed -i 's/OLD/NEW/g' -- {} \;
Exécuter un script dans tous les répertoires et sous-répertoires
find . -type d -exec sh -c 'cd "$0" && /PATH/SCRIPT' '{}' ';'
Boucler sur des fichiers/répertoires
Tous les sous-répertoires récursivement
find . -type d ! -name . -print | while read dir; do # code done
Tous les fichiers récursivement
find . -type f -print | while read dir; do # code done
Exécuter un script sur tous les fichiers contenant une expression
EXPRESSION peut être une expression rationnelle si l'on remplace grep -lq par grep -lqE (évidemment).find -type f -exec grep -lq "EXPRESSION" {} \; -print | \ while read file; do SCRIPT "$file" done
Compresser tous les répertoires courants
find -maxdepth 1 -type d ! -name "." -exec sh -c 'zip -r $0.zip $0' '{}' ';'
Archiver et compresser récursivement les fichiers de tous les répertoires
On supposera qu'il n'y a pas de retour à la ligne dans le nom des fichiersfind . -type d -print | \ while read dir; do ( cd "$dir" || exit find . -maxdepth 1 -type f ! -name archive.tgz -print | \ pax -w | gzip > archive.tgz ) done
Afficher les vingt répertoires les plus lourds de l'arborescence en cours
Les fichiers seront classés du plus lourd au moins lourd et les tailles sont données en ko.find . -type d ! -name . -prune -exec du -sk {} \+ | sort -nr | tail -n 20
Recopier hiérarchiquement un ensemble de fichiers
Dans l'exemple suivant, les fichiers d'extension sh présents dans toute l'arborescence de SOURCE_PATH seront recopié dans le répertoire DEST_PATH (qui doit exister) en conservant arborescence d'origine.find SOURCE_PATH -name '*.sh' | xargs cp -a --target-directory=DEST_PATH --parents
Ignorer un répertoire ainsi que tous les fichiers et répertoires s'y trouvant
Ceci est un exemple extrait de la page man de find, il permet d'ignorer tout ce qui se trouve dans PATH.find . -path PATH -prune -o -print
Pour ignorer plusieurs répertoires ?
find . \( -path ./DIR_A -prune -o -path ./DIR_B \) -prune -o -print