Bonjour,
je débute en scripting et j'aimerais automatiser des renommages de
fichiers (triple extension après passage de mppdec et lame).
J'ai une solution qui fonctionne bien avec sed mais un problème
lorsque les noms de fichiers comportent des espaces...
Voici ce que j'ai pour l'instant :
for i in *.mpc.wav;
do mv $i `ls $i | sed 's/\.mpc\.wav//'`;
done;
qui fonctionne parfaitement avec les noms de fichiers sans espaces.
En revanche, tout appel à cette fonction avec des fichiers du style
"01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
mv: when moving multiple files, last argument must be a directory
Et même en mettant des print pour vérifier le résultat de chaque
étape, je ne vois pas à quel moment mv pourrait agir sur plus de
deux arguments...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
JustMe
Zakath wrote:
Bonjour, je débute en scripting et j'aimerais automatiser des renommages de fichiers (triple extension après passage de mppdec et lame). J'ai une solution qui fonctionne bien avec sed mais un problème lorsque les noms de fichiers comportent des espaces...
Voici ce que j'ai pour l'instant :
for i in *.mpc.wav; do mv $i `ls $i | sed 's/.mpc.wav//'`; done;
par ex :
for i in *.mpc.wav; do mv "$i" "`echo $i | sed 's/.mpc.wav//'`"; done;
par exemple
qui fonctionne parfaitement avec les noms de fichiers sans espaces. En revanche, tout appel à cette fonction avec des fichiers du style "01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
mv: when moving multiple files, last argument must be a directory
Et même en mettant des print pour vérifier le résultat de chaque étape, je ne vois pas à quel moment mv pourrait agir sur plus de deux arguments...
Merci beaucoup d'éclairer ma lanterne.
Zakath
Zakath wrote:
Bonjour,
je débute en scripting et j'aimerais automatiser des renommages de
fichiers (triple extension après passage de mppdec et lame).
J'ai une solution qui fonctionne bien avec sed mais un problème
lorsque les noms de fichiers comportent des espaces...
Voici ce que j'ai pour l'instant :
for i in *.mpc.wav;
do mv $i `ls $i | sed 's/.mpc.wav//'`;
done;
par ex :
for i in *.mpc.wav;
do mv "$i" "`echo $i | sed 's/.mpc.wav//'`";
done;
par exemple
qui fonctionne parfaitement avec les noms de fichiers sans espaces.
En revanche, tout appel à cette fonction avec des fichiers du style
"01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
mv: when moving multiple files, last argument must be a directory
Et même en mettant des print pour vérifier le résultat de chaque
étape, je ne vois pas à quel moment mv pourrait agir sur plus de
deux arguments...
Bonjour, je débute en scripting et j'aimerais automatiser des renommages de fichiers (triple extension après passage de mppdec et lame). J'ai une solution qui fonctionne bien avec sed mais un problème lorsque les noms de fichiers comportent des espaces...
Voici ce que j'ai pour l'instant :
for i in *.mpc.wav; do mv $i `ls $i | sed 's/.mpc.wav//'`; done;
par ex :
for i in *.mpc.wav; do mv "$i" "`echo $i | sed 's/.mpc.wav//'`"; done;
par exemple
qui fonctionne parfaitement avec les noms de fichiers sans espaces. En revanche, tout appel à cette fonction avec des fichiers du style "01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
mv: when moving multiple files, last argument must be a directory
Et même en mettant des print pour vérifier le résultat de chaque étape, je ne vois pas à quel moment mv pourrait agir sur plus de deux arguments...
Merci beaucoup d'éclairer ma lanterne.
Zakath
Stephane Chazelas
2004-07-07, 17:30(+02), Zakath:
Bonjour, je débute en scripting et j'aimerais automatiser des renommages de fichiers (triple extension après passage de mppdec et lame).
Exemple d'interet de zsh:
zmv '(*).mpc.wav' '$1'
Qui fonctionne parfaitement quels que soient les noms des fichiers.
(autoload -U zmv si pas deja dans le ~/.zshrc)
-- Stephane
2004-07-07, 17:30(+02), Zakath:
Bonjour,
je débute en scripting et j'aimerais automatiser des renommages de
fichiers (triple extension après passage de mppdec et lame).
Exemple d'interet de zsh:
zmv '(*).mpc.wav' '$1'
Qui fonctionne parfaitement quels que soient les noms des
fichiers.
Bonjour, je débute en scripting et j'aimerais automatiser des renommages de fichiers (triple extension après passage de mppdec et lame).
Exemple d'interet de zsh:
zmv '(*).mpc.wav' '$1'
Qui fonctionne parfaitement quels que soient les noms des fichiers.
(autoload -U zmv si pas deja dans le ~/.zshrc)
-- Stephane
Laurent Wacrenier
Zakath écrit:
Voici ce que j'ai pour l'instant :
for i in *.mpc.wav; do mv $i `ls $i | sed 's/.mpc.wav//'`;
Ho que c'est moche.
mv "$i" "${i%.mpc.wav}"
done;
qui fonctionne parfaitement avec les noms de fichiers sans espaces. En revanche, tout appel à cette fonction avec des fichiers du style "01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
Sans compter les répertoires. Ne pas utiliser "ls" à tort et à travers.
Zakath <I_hate_spam@laposte.net> écrit:
Voici ce que j'ai pour l'instant :
for i in *.mpc.wav;
do mv $i `ls $i | sed 's/.mpc.wav//'`;
Ho que c'est moche.
mv "$i" "${i%.mpc.wav}"
done;
qui fonctionne parfaitement avec les noms de fichiers sans espaces.
En revanche, tout appel à cette fonction avec des fichiers du style
"01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
Sans compter les répertoires.
Ne pas utiliser "ls" à tort et à travers.
for i in *.mpc.wav; do mv $i `ls $i | sed 's/.mpc.wav//'`;
Ho que c'est moche.
mv "$i" "${i%.mpc.wav}"
done;
qui fonctionne parfaitement avec les noms de fichiers sans espaces. En revanche, tout appel à cette fonction avec des fichiers du style "01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
Sans compter les répertoires. Ne pas utiliser "ls" à tort et à travers.
Stephane Chazelas
2004-07-07, 17:30(+02), Zakath: [...]
for i in *.mpc.wav;
Exemples de bugs corrigés par zsh:
Ici, s'il n'y a pas de fichier *.mpc.wav, bash/ksh vont parcourir la boucle avec un element "*.mpc.wav". zsh ne va rien faire et reporter l'erreur.
do mv $i `ls $i | sed 's/.mpc.wav//'`;
Autre exemple de bug corrigé par zsh.
Pour bash/ksh, $i sans quote est decoupé en plusieurs arguments suivant les espaces, et les wilcards sont "expanded". Pas dans zsh.
Par contre dans zsh aussi le resultat d'une command subsitution est decoupe (pas de wildcard expansion qui ne fait aucun sens contrairement a bash/ksh par contre).
Ici, pour etre propre, avec bash/ksh, il faut faire
set x [*].mpc.wav *.mpc.wav case $2$3 in '[*].mpc.wav*.mpc.wav') echo >&2 "no .mpc.wav file"; false;; *) for f do mv -- "$f" "${f%.mpc.wav}" done;; esac
(pas testé).
Alors que l'equicalent zsh est:
for f (*.mpc.wav) mv -- $f ${f:r:r}
(pas testé non plus mais je suis plus confiant que ca va marcher et pas besoin d'ecrire de script).
-- Stephane
2004-07-07, 17:30(+02), Zakath:
[...]
for i in *.mpc.wav;
Exemples de bugs corrigés par zsh:
Ici, s'il n'y a pas de fichier *.mpc.wav, bash/ksh vont
parcourir la boucle avec un element "*.mpc.wav". zsh ne va rien
faire et reporter l'erreur.
do mv $i `ls $i | sed 's/.mpc.wav//'`;
Autre exemple de bug corrigé par zsh.
Pour bash/ksh, $i sans quote est decoupé en plusieurs arguments
suivant les espaces, et les wilcards sont "expanded". Pas dans
zsh.
Par contre dans zsh aussi le resultat d'une command subsitution
est decoupe (pas de wildcard expansion qui ne fait aucun sens
contrairement a bash/ksh par contre).
Ici, pour etre propre, avec bash/ksh, il faut faire
set x [*].mpc.wav *.mpc.wav
case $2$3 in
'[*].mpc.wav*.mpc.wav') echo >&2 "no .mpc.wav file"; false;;
*) for f
do mv -- "$f" "${f%.mpc.wav}"
done;;
esac
(pas testé).
Alors que l'equicalent zsh est:
for f (*.mpc.wav) mv -- $f ${f:r:r}
(pas testé non plus mais je suis plus confiant que ca va
marcher et pas besoin d'ecrire de script).
Ici, s'il n'y a pas de fichier *.mpc.wav, bash/ksh vont parcourir la boucle avec un element "*.mpc.wav". zsh ne va rien faire et reporter l'erreur.
do mv $i `ls $i | sed 's/.mpc.wav//'`;
Autre exemple de bug corrigé par zsh.
Pour bash/ksh, $i sans quote est decoupé en plusieurs arguments suivant les espaces, et les wilcards sont "expanded". Pas dans zsh.
Par contre dans zsh aussi le resultat d'une command subsitution est decoupe (pas de wildcard expansion qui ne fait aucun sens contrairement a bash/ksh par contre).
Ici, pour etre propre, avec bash/ksh, il faut faire
set x [*].mpc.wav *.mpc.wav case $2$3 in '[*].mpc.wav*.mpc.wav') echo >&2 "no .mpc.wav file"; false;; *) for f do mv -- "$f" "${f%.mpc.wav}" done;; esac
(pas testé).
Alors que l'equicalent zsh est:
for f (*.mpc.wav) mv -- $f ${f:r:r}
(pas testé non plus mais je suis plus confiant que ca va marcher et pas besoin d'ecrire de script).
-- Stephane
Zakath
Zakath wrote:
Bonjour, je débute en scripting et j'aimerais automatiser des renommages de
fichiers (triple extension après passage de mppdec et lame).
J'ai une solution qui fonctionne bien avec sed mais un problème
lorsque les noms de fichiers comportent des espaces...
Voici ce que j'ai pour l'instant :
for i in *.mpc.wav; do mv $i `ls $i | sed 's/.mpc.wav//'`; done;
qui fonctionne parfaitement avec les noms de fichiers sans espaces.
En revanche, tout appel à cette fonction avec des fichiers du style
"01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
mv: when moving multiple files, last argument must be a directory
Et même en mettant des print pour vérifier le résultat de chaque
étape, je ne vois pas à quel moment mv pourrait agir sur plus de
deux arguments...
Merci beaucoup d'éclairer ma lanterne.
Zakath
Je réponds ici pour ne défavoriser aucune des gentilles personnes qui m'ont répondu. J'utilise déjà zsh, et zmv s'est parfaitement débrouillé. Je vais essayer les autres solutions pas acquis de conscience.
Merci beaucoup !
Zakath wrote:
Bonjour,
je débute en scripting et j'aimerais automatiser
des renommages de
fichiers (triple extension après passage de
mppdec et lame).
J'ai une solution qui fonctionne bien avec sed
mais un problème
lorsque les noms de fichiers comportent des
espaces...
Voici ce que j'ai pour l'instant :
for i in *.mpc.wav;
do mv $i `ls $i | sed 's/.mpc.wav//'`;
done;
qui fonctionne parfaitement avec les noms de
fichiers sans espaces.
En revanche, tout appel à cette fonction avec
des fichiers du style
"01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
mv: when moving multiple files, last argument
must be a directory
Et même en mettant des print pour vérifier le
résultat de chaque
étape, je ne vois pas à quel moment mv pourrait
agir sur plus de
deux arguments...
Merci beaucoup d'éclairer ma lanterne.
Zakath
Je réponds ici pour ne défavoriser aucune des
gentilles personnes qui m'ont répondu. J'utilise
déjà zsh, et zmv s'est parfaitement débrouillé. Je
vais essayer les autres solutions pas acquis de
conscience.
Bonjour, je débute en scripting et j'aimerais automatiser des renommages de
fichiers (triple extension après passage de mppdec et lame).
J'ai une solution qui fonctionne bien avec sed mais un problème
lorsque les noms de fichiers comportent des espaces...
Voici ce que j'ai pour l'instant :
for i in *.mpc.wav; do mv $i `ls $i | sed 's/.mpc.wav//'`; done;
qui fonctionne parfaitement avec les noms de fichiers sans espaces.
En revanche, tout appel à cette fonction avec des fichiers du style
"01 Piste1.mpc.wav.mp3", j'ai un message d'erreur
mv: when moving multiple files, last argument must be a directory
Et même en mettant des print pour vérifier le résultat de chaque
étape, je ne vois pas à quel moment mv pourrait agir sur plus de
deux arguments...
Merci beaucoup d'éclairer ma lanterne.
Zakath
Je réponds ici pour ne défavoriser aucune des gentilles personnes qui m'ont répondu. J'utilise déjà zsh, et zmv s'est parfaitement débrouillé. Je vais essayer les autres solutions pas acquis de conscience.