Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#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


eval, c'est mal.

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.


eval, c'est mal.

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 13.04 64 bits  / ubuntu 14.04 64 bits /
asus p6t, core i7 920, 7go 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, à 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)

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

nc13160 a écrit :

J'ai une arboresence avec de nombreux sous dossiers

shopt -s nullglob globstar
for i in ./**/*\%*; do mv "$i" "${i//\%/_}"; done

eval, c'est mal.

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.

En ligne

#10 Le 29/01/2013, à 21:07

Sciensous

Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers

Watael a écrit :

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

merci

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

watael a écrit :

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)


eval, c'est mal.

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

Latsuj a écrit :

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.

Latsuj a écrit :

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, à 15:24

nc13160

Re : Remplacer le caractere % par _ dans tous les fichiers des sousdossiers

un gros merci vous faites trop fort !!!!!!

Hors ligne

Haut de page ↑