#1 Le 29/01/2013, à 16:39
- nc13160
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, à 17:22
- Watael
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
salut,
renommer -> rename
LOL
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 29/01/2013, à 17:26
- Maisondouf
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;done
Les 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;done
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
#4 Le 29/01/2013, à 17:51
- Watael
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.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 29/01/2013, à 18:02
- fouduroi
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
en graphique pyrenamer
ubuntu 14.04 64 bits / ubuntu 16.04 64 bits
asus p6t, core i7 920, 7go ram, nvidia gt630
http://www.pullco.fr/ association pour la Promotion de l’Utilisation des Logiciels Libres en COrrèze
pourquoi Linux est le meilleur?
Hors ligne
#6 Le 29/01/2013, à 18:53
- Sciensous
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
soyons barbare, en shell:
for i in *\%*; do mv "$i" "${i/\%/_}"; done
et s'il ya +sieurs %:
for i in *\%*; do mv "$i" "${i//\%/_}"; done
Dernière modification par Sciensous (Le 29/01/2013, à 18:56)
sous ubuntu LTS de la 06 à la 22.04, puis arrêt pour Debian 12 et antiX 21 ou 23
( sous LXDE et gnome-shell )
Hors ligne
#7 Le 29/01/2013, à 19:42
- Watael
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//\%/_}"; done
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 29/01/2013, à 19:45
- Maisondouf
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, à 20:41
- Haleth
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, à 21:07
- Sciensous
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
sous ubuntu LTS de la 06 à la 22.04, puis arrêt pour Debian 12 et antiX 21 ou 23
( sous LXDE et gnome-shell )
Hors ligne
#11 Le 29/01/2013, à 23:40
- Latsuj
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
done
Puis-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, à 00:21
- Watael
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, à 00:36)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 30/01/2013, à 00:34
- spinoziste
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, à 10:45
- Latsuj
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, à 11:44
- Watael
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
...
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 30/01/2013, à 15:24
- nc13160
Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers
un gros merci vous faites trop fort !!!!!!
Hors ligne