Find
De drev
Sommaire
- 1 synopsis
- 2 Options essentielles
- 3 Cas pratique
- 3.1 rechercher dans une arborescence et afficher le fichier et la ligne
- 3.2 Afficher le total de la recherche en MB
- 3.3 Renommer en masse
- 3.4 Lister les répertoires "feuilles"
- 3.5 Limiter la profondeur de la recherche
- 3.6 zipper une arborescence
- 3.7 zipper les répertoires sans recrutions
- 3.8 Exclusion de répertoire
- 3.9 Rechercher plusieurs extensions
- 3.10 boucler sur chaque resultat de find
- 3.11 find basename
synopsis
find <PATH> -name "regexp"
Options essentielles
type
- -type d pour ne chercher que les répertoires
- -type f pour ne chercher que les fichiers
Exemple : lister les reprtoires
find -name "*" - type d
maxdepth
limiter la récursions
find -name "*" -maxdepth 1
-exec
exécute une commande avec chaque résultats de find
{} représente les résultats de find
\; doit terminer l'expression
-grep
permet de chercher dans les fichiers (voir grep)
- -i insensible à la casse
- -H, --with-filename Afficher le nom du fichier pour chaque concordance.
- -n, --line-number Ajouter à chaque ligne de sortie un préfixe contenant son numéro dans le fichier.
Cas pratique
rechercher dans une arborescence et afficher le fichier et la ligne
find "/var/www" -name "*.php" -type f -exec grep -Hn "class" {} \;
Afficher le total de la recherche en MB
find ./berserk/*.epub -ls | awk '{total += $7} END {print total / 1000000}'
Renommer en masse
find . -name "*.zip" -exec rename -v 's/\.zip$/\.cbz/' {} +
Lister les répertoires "feuilles"
find . -type d -links 2
Limiter la profondeur de la recherche
find . -type d -maxdepth 1
zipper une arborescence
find . -type d -exec zip -r {}.cbz {} \;
zipper les répertoires sans recrutions
find . -type d -maxdepth 1 -exec zip -r {}.zip {} \;
Exclusion de répertoire
mkdir a b c d e find * -maxdepth 0 -name "[abc]" -prune -o -exec echo {} \; d e
Rechercher plusieurs extensions
find -regex '.*\.\(zip\|gz\)'
boucler sur chaque resultat de find
find . -name '*.txt' | while read line; do echo "Processing file '$line'" done
source https://stackoverflow.com/a/2087038/2323803
find basename
find . -exec sh -c 'echo $(basename "{}")' \