[gull] Espaces dans les noms de fichiers

Julien Künzi julien.kuenzi at gmail.com
Tue Jan 25 20:20:03 CET 2005


Le Mardi, 25 Janvier 2005 18.49, Philippe Strauss a écrit :
> A ce propos:
> J'avais une série de fichier .wav dont le e accent aigu était pas
> bien interprété (on voyait un ? a la place).
> Comment faire pour renommer tout d'un coup, genre:
>
> for i in *.wav; do mv $(echo \"$i\") $(echo \"$i\" | sed -e
> "s/NoirD.sir/Noir Désir/g") ; done
>
> ca me donnait "mv: when moving multiple file, destination must be a
> directory"

julien at begbie:/tmp/test2> ls
Noir Daasir - 1.wav  Noir Daasir - 4.wav  Noir Daasir - 7.wav
Noir Daasir - 2.wav  Noir Daasir - 5.wav  Noir Daasir - 8.wav
Noir Daasir - 3.wav  Noir Daasir - 6.wav  Noir Daasir - 9.wav
julien at begbie:/tmp/test2> for i in *; do mv "$i" "$(echo "$i" | sed -e "s/Noir 
Daasir/Noir Désir/g")" ; done
julien at begbie:/tmp/test2> ls
Noir Désir - 1.wav  Noir Désir - 4.wav  Noir Désir - 7.wav
Noir Désir - 2.wav  Noir Désir - 5.wav  Noir Désir - 8.wav
Noir Désir - 3.wav  Noir Désir - 6.wav  Noir Désir - 9.wav

Avec votre méthode, le " (i.e. \" après avoir été interprété par le shell) est 
considéré comme un caractère faisant partie du nom de fichier, et non comme 
un moyen de faire comprendre au shell que l'argument est composé de plusieurs 
mots. 

julien at begbie:/tmp/test2> touch test

julien at begbie:/tmp/test2> echo \"test\"
"test"

julien at begbie:/tmp/test2> mv $(echo \"test\") test2 
mv: ne peut évaluer `"test"': Aucun fichier ou répertoire de ce type

julien at begbie:/tmp/test2> mv "test" test2
julien at begbie:/tmp/test2> ls test*
test2

De manière générale, d'après mon expérience (touristique), il suffit de mettre 
les arguments entre guillemets doubles ("$i", "$(echo test)") pour éviter les 
ennuis.

bye,
   julien.



More information about the gull mailing list