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 05/03/2006, à 23:50

Smon

Script pour renommer des fichiers

Voilà j'ai un script qui me permet de renommer les fichiers d'un répertoire.

for i in *.wma.wav.mp3
        do mv "$i" ${i%wm*}mp3
done

Celui-ci sert à enlever tout ce qui suit les caracteres "wm" si je ne me trompe pas...

Alors voilà, si c'est possible j'aimerais que quelqu'un m'explique comment fonctionne ce type de codage (à quoi sert le %, les crochets, etc...)

D'autre part j'aimerais savoir comment je peux faire pour lui dire d'enlever des caratères situés en début de nom de fichier :

exemple monfichier s'appelle "01  Track01" et je veux le renommer "Track01".. Je fais comment?

Merci d'avance^^

Hors ligne

#2 Le 06/03/2006, à 00:11

Link31

Re : Script pour renommer des fichiers

Pour enlever tout ce qu'il y a avant le wm c'est do mv "$i" ${i#*wm}mp3 (enfin pour ce que je vaux en programmation bash...). Il faut remplacer le % par # et inverser ce qui suit.
Si le script de départ est juste bien sûr.

Pour le Track à mon avis c'est

for i in *.wma.wav.mp3
        do mv "$i" "${i#*" "}"
done

Documentation: http://abs.traduc.org/abs-3.5-fr/parameter-substitution.html#LENGTH

Hors ligne

#3 Le 06/03/2006, à 00:13

mathesis

Re : Script pour renommer des fichiers

Sinon tu peux utiliser Krename, c'est graphique et tu as plus de possibilités.
C'est tout à fait indiquer pour la manipulation de nom de fichier mp3 (j'en renomme des tonnes en ce moment comme ça). Moins puissant que eMusic Tag Editor sous windows car les règles de renommage se juxtaposent alors qu'avec l'autre logiciel elles se prennent en compte les unes avec les autres (en fonction de l'ordre dans lequel elles ont été spécifiées).

Exemple :
NOM -_fichier.mp3

règle 1 : espace ->_
règle 2 : - -> _
règle 3 : ___ -> __

Résultat avec Krename : Mon_NOM___fichier.mp3
Résultat avec eMusic..  : Mon_NOM__fichier.mp3

Pour arriver au résultat de eMusic avec Krename il faut faire deux passes.

Les deux gèrent les minuscules et Krename (je ne sais plus pour l'autre) gère la casse des extensions.
Il y des options intéressantes avec Krename pour la numérotation de fichiers qui ne sont pas présentes dans eMusic.

Dernière modification par mathesis (Le 06/03/2006, à 00:24)

Hors ligne

#4 Le 06/03/2006, à 00:15

Smon

Re : Script pour renommer des fichiers

Donc tu penses qu'il faut mettre i#*"   " sachant qu'entre les " " l y a trois espaces?

Je vais essayer et je te dis

Dernière modification par Smon (Le 06/03/2006, à 00:27)

Hors ligne

#5 Le 06/03/2006, à 00:18

sksbir

Re : Script pour renommer des fichiers

petit conseil : mettre "echo" devant la commande mv, afin de voir ce qu'elle essaye de faire, histoire d'éviter une catastrophe pour une virgule oubliée...


sinon, j'ai déja planché sur le sujet, en sh, et ça se passe ici

Hors ligne

#6 Le 06/03/2006, à 00:23

Smon

Re : Script pour renommer des fichiers

Bon c'est pas ca...

J'ai essayé avec et sans le *, j'ai aussi essayé de remplacer les espaces par des "_" mais rien...

Mon script donne ça (c'est des fichiers mp3 que je veux renommer) :

for i in *.mp3
        do mv "$i" ${i#*"    "}
done

Dernière modification par Smon (Le 06/03/2006, à 00:29)

Hors ligne

#7 Le 06/03/2006, à 00:28

Smon

Re : Script pour renommer des fichiers

Avec un echo devant je vois que ça ne fait rien du tout... lol Le nom reste exactement le me tongue

J'ai essayé Kername mais je trouve ça bof... Coder sois même c'est plus puissant et plus marrant big_smile

Dernière modification par Smon (Le 06/03/2006, à 00:30)

Hors ligne

#8 Le 06/03/2006, à 09:41

yarel

Re : Script pour renommer des fichiers

J'ai fais ce script il y a quelques temps :
http://jmyarel.free.fr/index.php?idm=mss&ide=yrscpt

peut-être il te sera utile ?

merci de m'avoir lu


vivez libre... pensez libre...
installez GNU / LINUX
yarel contrib

Hors ligne

#9 Le 08/03/2006, à 13:21

phlinux

Re : Script pour renommer des fichiers

Je dois avouer que je ne comprends pas tres bien ce que l'on veut faire avec ce script, car ce qui est ecrit donne pour 4 fichiers : a.wma b.mp3 c.wav d.wma : mv *.wma.wav.mp3 *.wma.wav.mp3mp3
Je pars donc de suppositions :
Si on cherche a appliquer le script sur tous les fichiers wma wav et mp3, alors il faut ecrire :

 for i in *.wma *.wav *.mp3; do ..... done

Si le script est sensé renommer tous les fichiers en mp3 cela ne fonctionnera pas non plus car l'expantion de variable utilisee fonctionnera correctement avec les wma mais pas avec les autres. En effet elle remplace wm* par mp3, mais si elle trouve wav elle ne remplacera rien (puisqu'il n'y a pas de wmxxx et ajoutera mp3.
Resultat :

mv b.wma b.mp3
mv d.wma d.mp3
mv c.wav c.wavmp3
mv a.mp3 a.mp3mp3

Explication de la syntaxe :
Les accolades délimitent le nom de la variable. elles ne sont pas obligatoires pour des utilisations simples, mais il est fortement conseillé d'en prendre systématiquement l'habitude. Par exemple ${i} est équivalent à $i.
Si on ecrit A=${i}1, ce sera different de A=$i1 !
Essayez :

i=0; i1=9
A=${i}1; echo $A --> 01
A=$i1; echo $A --> 9

L'expansion de variable ${parametre#modele} indique d'effacer la partie gauche du contenu de la variable parametre si elle est la même que dans modele.
Un % au lieu de #, efface la partie droite du contenu de la variable parametre si elle est la même que dans modèle.
Par exemple :

A=$(pwd)       --> A = /home/toto/src  avec  HOME=/home/toto
echo ${A}
B=${A#$HOME/}    --> B = src
echo ${B}

Voilà ....

une autre bonne adresse à connaître : http://marcg.developpez.com/ksh

Dernière modification par phlinux (Le 08/03/2006, à 13:23)


Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670

Hors ligne

#10 Le 08/03/2006, à 13:42

yarel

Re : Script pour renommer des fichiers

je me sert de ce script UNIQUEMENT pour renomer une partie commune du nom d'un ou plusieurs fichier ayant la même extension.

exemple:
un dossier photo avec des fichiers comme cela:
dsc#001.jpg
dsc#002.jpg

utilisation :

$ ./remplace#.sh *.jpg
> entrez le caractère à remplacer
c
> entrez le caractère de remplacement
o
resultat
dso#001.jpg
dso#002.jpg

Ce script est sans prétention aucunes, et ne me sert qu'a une chose
je l'explique sur le site :
"J'ai fait ce script à cause de l'appareil photo de ma fille qui nomme les images "date#numero" le "#" empêchant l'affichage de l'image dans ma galerie php."

je l'ai fait juste pour ça , pas plus neutral

merci de m'avoir BIEN lu

une p'tite adresse pour les scripts avec un champ de recherche dans la doc (fr)
http://www.bsdbooks.net/shells/scripting/fr/index.html

Dernière modification par yarel (Le 08/03/2006, à 13:53)


vivez libre... pensez libre...
installez GNU / LINUX
yarel contrib

Hors ligne

#11 Le 08/03/2006, à 13:44

mathesis

Re : Script pour renommer des fichiers

À part pour s'amuser, pourquoi ne pas utiliser des logiciels qui permettent ce genre de chose de façon avancée ? (je le répète Krename est dans les dépôts).

Hors ligne

#12 Le 08/03/2006, à 14:21

asher256

Re : Script pour renommer des fichiers

y a aussi rename qui est très pratique.

man rename pour plus d'infos.

Dernière modification par asher256 (Le 08/03/2006, à 14:22)


Blog dédié à Linux : http://blog.asher256.com

Hors ligne

#13 Le 08/03/2006, à 16:08

phlinux

Re : Script pour renommer des fichiers

En fait je répondais à Simon sur l'exemple fourni initialement.
Pour ton cas on peut utiliser tr :

A=dsc#001.jpg
B=$(echo ${A} | tr -d 'o')
echo ${B} --> dso#001.jpg

ou encore avec l'exemple date#Numero

A=080306#0045
B=$(echo ${A} | tr -d '#')
echo ${B}   -->  0803060045

En effet, certains produits à interface graphique font cela très bien. Reste que pour automatiser ce genre de chose, il faut le scripter. Maintenant je crois aussi aux vertus de la pratique "les mains dans le cambouis" pour comprendre ce que l'on fait. L'utilisation des IHM c'est bien ... après être passé par là d'abord. (IMHO)
Et puis le fun de chercher c'est tout de même aut'chose !!!!


Ubuntu - Precise Pangolin 64bits
ATI Radeon HD5670

Hors ligne

#14 Le 09/03/2006, à 01:05

yarel

Re : Script pour renommer des fichiers

phlinux a écrit :

En fait je répondais à Simon sur l'exemple fourni initialement.

ooops, désolé, j'avais pas capté

phlinux a écrit :

Pour ton cas on peut utiliser tr :
Code:

A=dsc#001.jpg
B=$(echo ${A} | tr -d 'o')
echo ${B} --> dso#001.jpg

ou encore avec l'exemple date#Numero

Code:

A=080306#0045
B=$(echo ${A} | tr -d '#')
echo ${B}   -->  0803060045

Hé oui, mais à l'époque je ne connaissait pas encore "tr" ,"cut"...et toutes ces commandes
très pratique.

merci de m'avoir lu


vivez libre... pensez libre...
installez GNU / LINUX
yarel contrib

Hors ligne