# Script bash depuis nautilus

**URL:** <https://www.debian-fr.org/t/script-bash-depuis-nautilus/29129>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 11:51 UTC](https://www.debian-fr.org/t/script-bash-depuis-nautilus/29129 "2016-02-20T23:51:40Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 11:51 UTC](https://www.debian-fr.org/t/script-bash-depuis-nautilus/29129/1 "2016-02-20T23:51:40Z")

</div>

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

```auto

```

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!

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 11:51 UTC](https://www.debian-fr.org/t/script-bash-depuis-nautilus/29129/2 "2016-02-20T23:51:41Z")

</div>

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`

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 11:51 UTC](https://www.debian-fr.org/t/script-bash-depuis-nautilus/29129/3 "2016-02-20T23:51:43Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 11:51 UTC](https://www.debian-fr.org/t/script-bash-depuis-nautilus/29129/4 "2016-02-20T23:51:43Z")

</div>

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ù.

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 11:51 UTC](https://www.debian-fr.org/t/script-bash-depuis-nautilus/29129/5 "2016-02-20T23:51:43Z")

</div>

Ok merci!

```auto
IFS='
'

```

ça correspond au retour à la ligne, mais

```auto
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…

---

<div class="post-metadata">

**Author:** ![thuban](https://www.debian-fr.org/user_avatar/www.debian-fr.org/thuban/32/4177_2.png) [@thuban](https://www.debian-fr.org/u/thuban)\
**Post date:** [Février 20, 2016, 11:51 UTC](https://www.debian-fr.org/t/script-bash-depuis-nautilus/29129/6 "2016-02-20T23:51:43Z")

</div>

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 🙂
