Script shell traversant tous les sous-répertoires et modifiant le contenu des fichiers

Je dois modifier un certain nombre de fichiers dans un répertoire. Je dois modifier tous les fichiers contenant un texte particulier et les remplacer par du nouveau texte.

J’ai donc pensé à écrire un script shell qui traverserait tous les sous-répertoires et modifierait le contenu, mais je rencontre des problèmes en parcourant tous les répertoires possibles.

Vous pouvez utiliser find pour parcourir des sous-répertoires à la recherche de fichiers, puis les transmettre à sed pour rechercher et remplacer le texte.

par exemple

 find /some/directory -type f -name "*.txt" -print -exec sed -i 's/foo/bar/g' {} \; 

va trouver tous les fichiers txt et remplacer foo avec bar en eux.

Le -i permet à sed de modifier les fichiers sur place. Vous pouvez également fournir un suffixe de sauvegarde à sed si vous souhaitez que les fichiers soient sauvegardés avant d’être modifiés.

Trouver GNU

 find /some_path -type f -name "*.txt" -exec sed -i 's/foo/bar/g' "{}" +; 

Vous voulez find .

 for n in $(find | grep txt$) do echo $n modify_content.sh $n done