Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/01/2013, à 17: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, à 18: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.

En ligne

#3 Le 29/01/2013, à 18: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, à 18: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.

En ligne

#5 Le 29/01/2013, à 19: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, à 19: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, à 19:56)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#7 Le 29/01/2013, à 20: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

Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#8 Le 29/01/2013, à 20: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, à 21: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, à 22: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


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#11 Le 30/01/2013, à 00: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, à 01: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, à 01:36)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#13 Le 30/01/2013, à 01: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, à 11: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, à 12: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
...

Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#16 Le 30/01/2013, à 16:24

nc13160

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

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

Hors ligne