Utilisation avancée de find
Remplacer une chaine dans plusieurs fichiers :
Tous fichiers, sans limite de profondeur :
find dir/ -type f -exec sed -i 's/OLD/NEW/' {} \;
Avec limite de profondeur :
find dir/ -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 dir/ -type d -exec sh -c 'cd "$0" && /PATH/SCRIPT' '{}' ';'
Boucler sur des fichiers/répertoires :
Tous les sous-répertoires récursivement :
find dir/ -type d ! -name . -print | while read dir; do # code done
Tous les fichiers récursivement :
find dir/ -type f -print | while read dir; do # code done
Tous les fichiers récursivement respectant un pattern :
find dir/ -type f -exec grep -lqE "Regex" {} \; -print | \ while read file; do SCRIPT "$file" done
Compresser tous les répertoires courants :
find dir/ -maxdepth 1 -type d ! -name "." -exec sh -c 'zip -r $0.zip $0' '{}' ';'
Recopier hiérarchiquement un ensemble de fichiers :
find dir/ -name '*.sh' | xargs cp -a --target-directory=DEST_PATH --parents #explain shell