Publié par : ungeekdeplus le : 1 juillet 2009
Cet article explique comment, sous linux, changer une ligne d’un fichier se trouvant dans plusieurs répertoires.
Ceci est plus une note qu’une véritable explication.
Soit la structure:
/home/user1/fichier.txt
/home/user2/fichier.txt
..
Se placer dans /home et lancer la commande suivante:
find . -maxdepth 2 -name fichier.txt -print | while read i do sed 's|TEXTE_A_CHERCHER|TEXTE_DE_REMPLACEMENT|g' $i > $i.tmp && mv $i.tmp $i done
Petite astuce: Si le nom de votre fichier contient des espaces, cela ne fonctionne pas.
Solution: Remplacer les espaces par des underscores. Pour cela:
find . -maxdepth 2 -name 'Fichier\ avec\ des\ espaces.txt' -exec rename 's/\s+/_/g' {} \;
Ce qui nous donnera Fichier_avec_des_espaces.txt.
-maxdepth 2 permet de ne pas aller dans les sous répertoires des utilisateurs (la commande n’ira pas dans /home/user1/dir1).
inspiration très fortes de ces 2 articles: