Un geekdeplus’s Blog

Archive for 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:

http://forums.devshed.com/showpost.php?p=633270&postcount=4

http://www.commandlinefu.com/commands/view/760/find-recursively-from-current-directory-down-files-and-directories-whose-names-contain-single-or-multiple-whitespaces-and-replace-each-such-occurrence-with-a-single-underscore.



  • Aucun
  • ungeekdeplus: Debian, mais il existe des paquets pour les autres distrib. Voir sur le site. Attention il y a une nouvelle version 2.x
  • sana: tu l'as testé sur quel système d'exploitation stp??
  • ungeekdeplus: @titon: Coquille modifiée. Merci. Pour les tuto d'install je vous invite à utiliser ceux du site officiel, vous pouvez utiliser les vms déjà pré-

Catégories