Contenu | Rechercher | Menus

Annonce

Le forum rencontre en ce moment quelques soucis de charge, il est possible qu'une erreur soit affichée quand vous postez un message, ne rechargez pas la page au risque de poster une seconde fois votre message

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".

#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;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, à 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/\%/_}"; done

et s'il ya +sieurs %:

for i in *\%*; do mv "$i" "${i//\%/_}"; done

Dernière modification par Sciensous (Le 29/01/2013, à 19:56)

En 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

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, à 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

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

En 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
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, à 01:21

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, à 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

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

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

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

Hors ligne

Haut de page ↑