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 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 _

brizou a écrit :

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 smile

'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 wink

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 smile))

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 smile)effectivement ton lien emmene assez loin

Dernière modification par clahor (Le 20/12/2007, à 22:53)

Hors ligne