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.