Ceci est sans doute le 794616ème sujet que vous lisez un topic sur ce sujet, désolé
Le sempiternel problème des noms de fichiers avec espaces en shell script
Soit un répertoire contenant des fichiers avec des espaces :
$ls
01. Phallic Tractor.mp3 08. Waiting.mp3
02. Fire Of Rock.mp3 09. Poison Eyes.mp3
03. Snakebite.mp3 10. B.R.O..mp3
04. Technical Difficulties.mp3 11. God Of The Sun.mp3
05. Miss Mistreater.mp3 12. Give It To Me.mp3
06. Bolt In My Heart.mp3 13. The Executioner's Song.mp3
07. 17th Moon.mp3 14. Children Of The Grave.mp3 |
Soit un "renommage" qui marche (j'ai mis cp, ca pourrait être mv ou une conversion mp3 to wav) :
$ for i in *.mp3
> do
> cp "$i" "$i".wav
> done |
Ce qui produit des fichiers "01. Phallic Tractor.mp3.wav"
Soit un "renommage" qui se veut plus fin et qui ne marche pas :
$ for i in *.mp3
> do > cp "$i" `basename "$i" .mp3`.wav
> done |
La question est : comment opérer un traitement sur $i plus fin que (basename) ou (echo "$i" | cut) pour obtenir des fichiers "01. Phallic Tractor.wav", tout en respectant les contraintes d'espacement ?
On pourrait bricoler avec $IFS, mais ca me semble un peu dangereux
Quelle est la solution à ce problème canonique ? Le but n'est pas d'appeler rename ou mmv, c'est plus général en fait : comment récupérer le basename d'un fichier contenant des espaces ?
Il existe bien ceci, mais c'est valable sous bash et pas sous sh non ?
$ for i in *.mp3
> do
> filename=${i%.mp3}
> cp "$i" "$filename".wav
> done
Message édité par Xavier_OM le 23-08-2005 à 11:29:23
---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.