Main menu:

Site search

Categories

mars 2008
L M M J V S D
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Archive

Effectuer une même opération sur un ensemble de fichiers

Imaginons que vous désiriez effectuer une même tâche sur tous les fichiers d’un répertoire comme par exemple les compresser avec tar. Imaginons que vous veniez de ripper votre dernier CD pour pouvoir en mettre les chansons en mp3 sur votre baladeur.

Effectuer ces opérations à la main sur chaque fichier peut vite devenir fastidieux à force de chaque fois retaper la même commande dans un terminal. Et bien, il y a moyen de simplifier l’opération avec quelques commandes simples en bash.

Prenons l’exemple du répertoire ~/music dans lequel se trouvent les fichiers .wav que vous voulez transcoder en mp3. Cette simple commande va rechercher tous les fichiers et les transformer en mp3 grâce à lame (encodeur mp3):

$  find ~/music -type f | while read x; do lame -b 192 -h "$x"; done

-type f indique à find que vous recherchez des fichiers. Ceux que find a trouvés vont apparaître sur sa sortie standard (celle qui est normalement affichée à l’écran), un nom de fichier par ligne. La sortie standard de find est redirigée par le pipe vers l’entrée standard de read. Ces lignes, contenant les noms fichiers trouvés par find, vont être lues par read dans une boucle while qui sera exécutée tant qu’il y a des noms de fichiers à lire à l’entrée. A chaque fois que la boucle est parcourue, le nom du fichier qui se trouve dans $x sera encodé en mp3 par lame.

Si dans votre répertoire, il risque d’y avoir autre chose que des fichiers .wav, il serait mieux de dire à find que ce sont des fichiers .wav que vous désirez. Il suffit d’une petite modification:

$  find ~/music -name \*.wav | while read x; do lame -b 192 -h "$x";done

Au lieu de spécifier à find que vous rechercher tel type de fichier, vous pouvez lui dire que ce sont les fichiers avec un certain nom qui vous intéressent. C’est ce qui est fait avec l’option -name \*.wav.

Une autre méthode pour encoder vos fichiers en une seule fois est d’utiliser une boucle for tout simplement:

$ for i in *.wav;do lame -b 192 -h "$i";done

Pour généraliser ces commandes, il suffit de remplacer la commande lame -b 192 -h par ce que vous voulez. Vous pouvez donc utiliser ce principe pour plein de choses différentes.

Comments

Pingback from Effectuer une même opération sur un ensemble de fichiers (version améliorée) | Autour de Linux
Time: 6 septembre 2009, 11 h 38 min

[…] un billet précédent, je montrais comment effectuer une opération sur un ensemble de fichiers en utilisant une simple […]