Pages : 1
#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
J'ai essayé Kername mais je trouve ça bof... Coder sois même c'est plus puissant et plus marrant
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
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
En fait je répondais à Simon sur l'exemple fourni initialement.
ooops, désolé, j'avais pas capté
Pour ton cas on peut utiliser tr :
Code:A=dsc#001.jpg
B=$(echo ${A} | tr -d 'o')
echo ${B} --> dso#001.jpgou 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