#1 Le 19/12/2007, à 11:48
- Alain128
script pour remplacer les espaces par un _
Bonjour,
j'ai des fichiers images contenant un ou plusieurs espaces dans leur nom. J'aimerais les remplacer par des _ car le programme web que j'utilise pour les traiter n'est pas compatible avec les photos ayant des espaces.
Et comme il y en a pas mal, j'aimerais un script pour faire çà. Si quelqu'un peut me le donner?
Merci d'avance
Alain
Hors ligne
#2 Le 19/12/2007, à 12:16
- JeansmackS
Re : script pour remplacer les espaces par un _
Salut,
Perso, j'utilise gprename, il permet de renommer fichiers ou dossiers mais par une interface graphique.
Pour un script, je ne pourrais pas t'aider par contre.
Hors ligne
#3 Le 19/12/2007, à 12:35
- Alain128
Re : script pour remplacer les espaces par un _
Merci, ça fonctionne.
Dernière modification par Alain128 (Le 19/12/2007, à 12:44)
Hors ligne
#4 Le 19/12/2007, à 13:10
- Alain.g
Re : script pour remplacer les espaces par un _
bonjour
rename 'y/ /_/' *.jpg
Xubuntu Karmic !
Hors ligne
#5 Le 19/12/2007, à 23:13
- brizou
Re : script pour remplacer les espaces par un _
Excusez moi de polluer le sujet mais moi je voudrais remplacer les . par des espaces sauf bien sûr le point avant l'extension du fichier est-ce possible ?
Hors ligne
#6 Le 20/12/2007, à 09:14
- Alain.g
Re : script pour remplacer les espaces par un _
je voudrais remplacer les . par des espaces sauf bien sûr le point avant l'extension du fichier est-ce possible ?
Oui, par exemple pour remplacer les . par un espace sur les fichiers d'extension .avi et .jpg (sensible à la case) du répertoire courant :
rename 's/\.(?![^\.]+$)/ /g' *.avi *.jpg
Je t'accorde que ce n'est pas très intuitif si on ne connait pas les expressions rationnelles
's/\./ /g' remplacerait tous les "." par des espaces
\.(?![^\.]*$) signifie en gros un point non suivi ("?!") d'une suite de caractères ne contenant pas de point ("[^\.]+") jusqu'à la fin du nom du fichier ("$")
On pourrait aussi s'y prendre autrement. Par exemple en remplaçant d'abord tous les "." par des espace (y/./ /) puis le dernier espace par un point
rename 'y/./ /;s/ ([^ ]+)$/.$1/' *.jpg *.avi
Il y aurait encore d'autres moyens, sans rename
attention toutefois aux extensions doubles, comme ".tar.gz". Si ces fichiers peuvent être visés, il faudrait affiner un peu l'expression rationnelle :
rename 's/\.(?!(tar\.)?[^\.]+$)/ /g' *.*
Dernière modification par Alain.g (Le 20/12/2007, à 09:17)
Xubuntu Karmic !
Hors ligne
#7 Le 20/12/2007, à 10:30
- brizou
Re : script pour remplacer les espaces par un _
Merci beaucoup je me suis servi de la première et ça fonctionne super bien .
Hors ligne
#8 Le 20/12/2007, à 13:12
- clahor
Re : script pour remplacer les espaces par un _
bjr interessant le petit script je ne suis pas tres feru de bash (je connais un peu la ligne de commande , le sed ) mais je ne comprends pas trop l'expression (je ne retrouve ça nulle part)
rename 's/\.(?![^\.]+$)/ /g' *.avi *.jpg
\.
un point
(?
n'importe quel caractere
!
sauf
[^\.]+$)
suite de caracteres ne contenant pas (!=non) un point jusqu'a la fin
$
le
+
je ne savais pas qu'il fallait l'indiquer
si je pouvais en profiter pour avoir une explication ce serait sympa ))
Dernière modification par clahor (Le 20/12/2007, à 13:25)
Hors ligne
#9 Le 20/12/2007, à 18:19
- Alain.g
Re : script pour remplacer les espaces par un _
Non ce n'est pas ça.
(?!motif) est une assertion (avant négative)
Pour prendre un exemple basique :
foo(?!bar) correspond à "foo" seulement s'il n'est PAS suivi de "bar"
foo(?=bar) correspond à "foo" uniquement s'il est suivi de "bar"
(?<=foo)bar correspond à "bar" uniquement si "foo" précède
(?<!foo)bar correspond à "bar" seulement s'il n'est PAS précédé de "foo"
Quelques précisions ici : http://lumadis.be/regex/tuto_pcre.php#look
Dans notre cas, on a "\." à la place de foo
et à la place de "bar" le motif : [^\.]+$
Le + est obligatoire à moins éventuellement de mettre un * à la place. C'est pour répéter "[^\.]" (sinon cela ferait juste un caractère)
Ces sont des expressions compatibles Perl (PCRE : voir le lien du dessus), tu ne pourras par exemple pas les utiliser avec SED. En revanche on peut avec SSED ("super sed"). Pas avec grep, mais avec pcregrep (ssed et pcregrep sont dispos dans les dépà´ts mais pas installés par défaut).
Dernière modification par Alain.g (Le 20/12/2007, à 20:37)
Xubuntu Karmic !
Hors ligne
#10 Le 20/12/2007, à 22:45
- clahor
Re : script pour remplacer les espaces par un _
merci a toi au moins j'aurais appris quelque chose , foo bar je crois que j'ai vu ça dans un tuto sur le bash )effectivement ton lien emmene assez loin
Dernière modification par clahor (Le 20/12/2007, à 22:53)
Hors ligne