Effectuer une même opération sur un ensemble de fichiers (version améliorée)
Dans un billet précédent, je montrais comment effectuer une opération sur un ensemble de fichiers en utilisant une simple ligne de commande. Je prenais comme exemple, pour illustrer le billet, la conversion d’un ensemble de fichiers audio .wav en mp3. Les commandes données fonctionnent très bien mais elles ont un inconvénient: lors de la conversion, l’extension .mp3 est ajoutée au fichier audio de sorte que le résultat est du genre mon_fichier.wav.mp3. Ce n’est pas vraiment gênant mais il est possible de faire en sorte que le fichier soit renommé de façon à ce que l’indication .wav soit enlevée et que cela devienne mon_fichier.mp3.
Pour arriver à ce résultat, on peut utiliser la commande basename qui permet de se débarrasser du path éventuel associé au fichier et de son extension.
On l’utilisera comme ceci:
$ find ~/music -name \*.wav | while read x; do lame -b 192 -h "$x" "`basename "$x" .wav`.mp3";done
Ou si vous préférez une boucle for:
$ for i in *.wav;do lame -b 192 -h "$i" "`basename "$i" .wav`.mp3";done
Attention de bien respecter le guillemets et apostrophes inversées ‘`’ autour de la commande basename et de ses arguments.
Posted: septembre 6th, 2009 under Ubuntu.
Comments: 1
Tweet
Comment from Yann
Time: 7 septembre 2009, 9 h 13 min
les backquote peuvent être aisément remplacer par $(commande) je trouve ça plus beau et sous un clavier azerty plus simple à taper 😉
echo `uptime` == echo $(uptime)
bon ok il faut un bash « récent » (fonctionne sous sarge) mais ça devrais le faire pour pas mal de monde.