Script bash depuis nautilus

Bonjour,

j’aimerais convertir des fichiers multimédias en mp3 depuis nautilus en executant un script externe. J’y arrive de cette façon, en plaçant le script suivant dans ~/.gnome2/nautilus-script

Et ça marche bien avec un fichier à la fois.

Maintenant ce que j’aimerai c’est sélectionner plusieurs fichiers et appliquer le script en une seule fois depuis nautilus…

Est-ce possible? La fonction de nautilus est-elle capable de lire plusieurs arguments? Et comment modifier le script? J’imagine qu’il faudra utilier une boucle for… Mais je ne maîtrise pas du tout…

Merci de votre aide!

je pense que nautilus peut le faire. Pour avoir tous les arguments, (autrement dit, les $1, $2, $3 …), il faut utiliser $@ .
Donc je verrai bien un truc du genre :

#!/bin/sh for i in $@; do ffmpeg -i "$i" -ac 2 -ab 192k -ar 44100 "$i".mp3 done
Ceci dit, les fichiers dont le nom contient des espaces poseront problème. C’est pour ça que j’ai rajouté les lignes avec $IFS (internal file separator) :

#!/bin/sh v_=$IFS IFS=' ' for i in $@; do ffmpeg -i "$i" -ac 2 -ab 192k -ar 44100 "$i".mp3 done IFS=$v_ exit 0

Merci!
C’est exactement ce que je voulais!! ça marche nickel!

Par contre j’ai pas bien compris le coup du IFS, je pensais que mettre l’argument “$i” entre guillemets suffisait à régler le problème des espaces…

Malheureusement, mettre entre guillement ne suffit pas toujours. C’est pourquoi je change IFS (internal file separator). Cette variable dit en fait à l’interpréteur de commande ce qui sépare les fichiers. Par défaut c’est un espace, là, je le change en retour à la ligne, et à la fin, je le remet à sa valeur d’origine juste au cas où.

Ok merci!

IFS='
'

ça correspond au retour à la ligne, mais

v_=$IFS
...
IFS=$v_

Qu’est ce que ça veut dire exactement? Pourquoi mettre $ et v_??

C’est juste histoire d’être moins bête ce soir et peut-être qu’un jour je serais capable de me débrouiller tout seul…

v_=$IFS : je sauvegarde la valeur actuelle de l’IFS, dans une variable “v_”, nom peu courant pour une variable.

Ensuite, je change l’IFS :
IFS=’

Enfin, une fois que tout est fini, je remet l’IFS à sa valeur de départ au cas où, mais normalement, comme il y a un exit à la fin du script ce n’est pas obligé, mais comme je ne suis pas sûr… :
IFS=$v_

et voila :slightly_smiling: