1 votes

Changer récursivement le nom d'un fichier et le contenu à l'intérieur du fichier s'il correspond à un mot-clé

Je peux utiliser sed pour effectuer de manière récursive une recherche et un remplacement dans une série de fichiers. Comme ceci :

find -name "*.py" -not \( -name .svn -prune \) -type f -print0 | xargs -0  sed -i 's/cat/dog/g'

Cependant, existe-t-il un moyen de rechercher une chaîne à la fois dans un fichier et dans les noms de fichiers?

Si la chaîne est trouvée dans le nom d'un fichier, alors remplacer la chaîne dans le nom de fichier par une nouvelle chaîne.

Si la chaîne est à l'intérieur du fichier, alors la remplacer par une nouvelle chaîne.

Et bien sûr, effectuer une recherche de manière récursive.

Des idées?

2voto

hamstar Points 11

Je ne sais pas comment faire cela en une seule fois, mais cela peut facilement être accompli en tant que petit script, par exemple (légèrement testé) :

find -name  "*.py"  -not \( -name .svn -prune \) -type f -print0 \
| while read -r -d $'\0' filename; do
    sed -i 's/cat/dog/g' "$filename"
    echo "$filename" | grep -q "cat" \
    && mv "$filename" "${filename/cat/dog}"
  done

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X