#1 Le 29/01/2013, à 17:39
Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
Bonjour,
J'ai une arboresence avec de nombreux sous dossiers qui contiennent des fichiers et nombreux dans le nom du fichier ont le caractère %.
Je souhaiterais que pour tous il soit remplacé par _ (underscore lol)
J'aimerais connaitre la commande pour renommer en masse l'ensemble d'un dossier et qui ferait dans tous les sous dossiers svp.
merci
Hors ligne
#2 Le 29/01/2013, à 18:22
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
salut,
renommer -> rename
LOL
eval, c'est mal.
Hors ligne
#3 Le 29/01/2013, à 18:26
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
Essayes ça en te plaçant dans le répertoire où tu veux appliquer la modification des noms
for i in `find -name "*"`;do d=`echo $i | sed 's/%/_/g'`;if [ $i != $d ];then echo "$i - $d";fi;doneLes noms des fichiers à renommer vont s'afficher, sI ça te plais tu lances ça:
for i in `find -name "*"`;do d=`echo $i | sed 's/%/_/g'`;if [ $i != $d ];then mv $i $d;fi;doneASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#4 Le 29/01/2013, à 18:51
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
find /chemin/ -type f -iname "*%*" -exec rename 's/%/_/g' {} \;for boucle sur une liste.
Ici, si les noms de fichiers comportent un caractère qui figure dans l'IFS, ça va échouer.
eval, c'est mal.
Hors ligne
#5 Le 29/01/2013, à 19:02
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
en graphique pyrenamer
ubuntu 13.04 64 bits / ubuntu 12.10 64 bits / xp trust 32bits /
asus p6t, core i7 920, 3go ram, nvidia gt220
http://www.pullco.fr/ association pour la Promotion de l’Utilisation des Logiciels Libres en COrrèze
Hors ligne
#6 Le 29/01/2013, à 19:53
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
soyons barbare, en shell:
for i in *\%*; do mv "$i" "${i/\%/_}"; doneet s'il ya +sieurs %:
for i in *\%*; do mv "$i" "${i//\%/_}"; doneDernière modification par Sciensous (Le 29/01/2013, à 19:56)
Hors ligne
#7 Le 29/01/2013, à 20:42
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
il faut pouvoir descendre dans les sous répertoires
J'ai une arboresence avec de nombreux sous dossiers
shopt -s nullglob globstar
for i in ./**/*\%*; do mv "$i" "${i//\%/_}"; doneeval, c'est mal.
Hors ligne
#8 Le 29/01/2013, à 20:45
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
@nc13160: tu t'y retrouves dans tout ce b.... ?
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#9 Le 29/01/2013, à 21:41
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
shopt -s globstar
rename 's/%/_/g' **Rapide et efficace ?
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#10 Le 29/01/2013, à 22:07
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
il faut pouvoir descendre dans les sous répertoires
nc13160 a écrit :J'ai une arboresence avec de nombreux sous dossiers
shopt -s nullglob globstar for i in ./**/*\%*; do mv "$i" "${i//\%/_}"; done

Hors ligne
#11 Le 30/01/2013, à 00:40
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
Bonsoir,
Personnellement, je l'aurais comme ceci :
#!/bin/bash
for file in $(find . -name "*%*"); do
contains=`expr index "$file" '%'`
if [[ $contains != 0 ]]; then
nname=${file/\%/\_};
mv "$file" "$nname"
fi
donePuis-je savoir à quoi sert le shopt -s nullglob globstar ? La commande help shopt n'étant pas très explicite, je ne comprends pas.
Bonne soirée.
Hors ligne
#12 Le 30/01/2013, à 01:21
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
for boucle sur une liste.
Ici, si les noms de fichiers comportent un caractère qui figure dans l'IFS, ça va échouer.
!
`expr' n'est pas une commande interne. Elle est inutile avec un shell compatible POSIX en général, avec bash en particulier.
Tu pourrais tirer parti des possibilités étendues des [[
if [[ $file == *%* ]]L'explication des options configurables avec shopt est dans le man bash.
Dernière modification par Watael (Le 30/01/2013, à 01:36)
eval, c'est mal.
Hors ligne
#13 Le 30/01/2013, à 01:34
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
Interessant tout ça je le garde dans mes messages . Merci .
Nous mourrons tous .
Hors ligne
#14 Le 30/01/2013, à 11:45
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
Bonjour,
Watael, je ne comprend pas trop ce que tu reproche à mon utilisation de 'expr'. Pourrais-tu développer ?
Si j'utilisais le double crochet, ne faudrait il pas plutôt mettre des apostrophes ? Si par exemple un nom de fichier comprenait des espaces ?
if [[ "$file" = *%* ]] Bonne journée
Hors ligne
#15 Le 30/01/2013, à 12:44
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
je ne comprend pas trop ce que tu reproche à mon utilisation de 'expr'. Pourrais-tu développer ?
J'ai dit tout ce que j'avais à dire : utiliser une commande externe, pour quelque chose que sait faire le shell, est inutile.
Si j'utilisais le double crochet, ne faudrait il pas plutôt mettre des apostrophes ? Si par exemple un nom de fichier comprenait des espaces ?
C'est une spécificité des [[ : ils protègent l'expression de gauche, sans qu'on ait besoin de la mettre entre guillemets.
`case' non plus, n'a pas besoin d'avoir la variable utilisée entre guillemet
var="quelque chose"
case $var in
...eval, c'est mal.
Hors ligne
#16 Le 30/01/2013, à 16:24
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
un gros merci vous faites trop fort !!!!!!
Hors ligne
Pages : 1
- Accueil
- » Forum
- » Terminal, scripts et ligne de commande
- » Remplacer le caractere % par _ dans tous les fichiers des sousdossiers