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
Cet article a été publié sous la catégorie tutos. Enregistrer cet article permalink.