Les scripts pour Nautilus

Le gestionnaire de fichiers Nautilus permet d'exécuter des scripts, sous la forme de fichiers textes. Les scripts sont de "petits" programmes permettant une multitude de fonctionnalités.

Les scripts suivants et d'autres trouvés sur le Web peuvent être copiés dans le répertoire de scripts de Nautilus. Certains s'exécutent avec les privilèges utilisateur ce qui signifie que vous pouvez endommager gravement votre système. Agissez donc avec beaucoup de prudence quand le script vous demande le mot de passe pour modifier le système. Beaucoup de scripts sont déjà présents dans les dépôts et peuvent être facilement installés par votre gestionnaire de paquets. Reportez-vous à la page de l'utilisation avancée de nautilus pour voir la liste complète de ces scripts.

Pour commencer, il vous faudra installer le paquet nautilus-scripts-manager. Ce paquet gère le dossier de scripts de Nautilus qui se trouve dans ~/.gnome2/nautilus-scripts pour Precise et également pour l'environnement de bureau MATE. Et pour les autres versions il se trouve dans ~/.local/share/nautilus/scripts/. Vous pouvez également mettre des scripts valables pour tous les utilisateurs dans /usr/share/nautilus-script.
(Le répertoire .local est caché dans votre dossier personnel. Pour y accéder il faut préalablement afficher les fichiers cachés. Dans la barre des menus → Affichage → Afficher les fichiers cachés ou faites Ctrl + h). Quand des scripts sont présents dans le dossier de scripts, il s'ouvre par clic-droit → Scripts → Ouvrir le dossier de scripts. Tant qu'il n'y a pas de scripts dedans le raccourci n'est pas disponible.

Placez-y vos scripts et rendez-les exécutables en faisant un clic droit sur le script en question → Propriétés → onglet Permissions → et cocher la case "Autoriser l’exécution du fichier comme un programme". Vous devriez nommer ces fichiers de façon à ce qu'ils évoquent quelque chose pour vous car c'est sous leurs noms qu'ils apparaîtront dans vos menus Nautilus. De plus vous n'avez pas besoin de rajouter l'extension .sh de scripts shell. Il est également possible de créer des dossiers pour mieux organiser les scripts. Vos scripts seront alors disponibles dans toutes les fenêtres Nautilus dans Fichier → Scripts, ainsi que dans le menu contextuel (clic droit). Vous ne verrez pas le menu Fichier tant que vous n'aurez pas ajouté votre premier script dans ~/.gnome2/nautilus-scripts ou dans ~/.local/share/nautilus/scripts/.

Le chemin des scripts pour :

  • Caja (Mate) est : ~/.config/caja/scripts.
  • Nautilus (Gnome/Unity) est : ~/.local/share/nautilus/scripts
  • Némo (Cinnamon) est : ~/.local/share/nemo/scripts/

Voir aussi:

Vous avez déjà des scripts Nautilus sur la page scripts utiles.

Le script Script Installer permet d'installer automatiquement les scripts Nautilus.

Les scripts dans les dépôts Canonical

Plusieurs scripts sélectionnés par un tiers

Web

Conversion de fichier

Image

Audio

Gestion des fichiers

Administration

Développement

Internet

Divers

La première chose qu'un script Nautilus doit récupérer, c'est la liste des fichiers sur lesquels il doit opérer (les fichiers qui étaient sélectionnés par l'utilisateur lorsqu'il a lancé le script). Malheureusement, c'est loin d'être quelque chose de trivial. En effet, à cause soit de bugs, soit d'interprétation du shell, plusieurs choses sont à ne pas utiliser.

Ne pas utiliser les arguments passés aux scripts

Nautilus passe en argument les noms des fichiers sélectionnés. Par exemple, si vous êtes dans /home/user, et que vous appliquez le script sur toto et titi, $PWD et $NAUTILUS_SCRIPT_CURRENT_URI vaudront '/home/user', $1 vaudra 'toto' et $2 vaudra 'titi'.

Premier problème, Nautilus offre une vue liste (qui pourrait d'ailleurs se nommer "arborescente"), on peut donc sélectionner des fichiers qui sont dans des sous-répertoires du répertoire courant. Dans ce cas "$PWD/$1" ne sera pas le bon chemin : bug 549816.

Second problème, sur le Bureau par exemple, Nautilus ne passe aucun argument au script : bug 549910.

Il ne faut donc pas utiliser des scripts du genre :

for arg
do
  do_something "$arg"
done

ou

for arg in "$@"
do
  do_something "$arg"
done

Ces scripts ne marcheraient pas dans tous les cas. Normalement, ce problème est corrigé dans Gnome 2.23 (Ubuntu ≥ 8.10).

Mais, même une fois corrigé, la méthode suivante devrait poser moins de problèmes (car on obtient directement la liste des chemins complets des fichiers).

Heureusement, Nautilus fournit une variable $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS, qui contient la liste des chemins complets des fichiers sélectionnés, séparés par '\n' (retour à la ligne). C'est donc cette variable qu'il faut utiliser. Par exemple :

#!/bin/bash
 
function faireQqChose () {
	zenity --info --text "le fichier est $@"
	}
 
IFS=$'\n' # on limite le IFS aux sauts de ligne
faireQqChose $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
 
exit 0
Dans certains cas, les chemins peuvent être séparés par une espace et pas par un retour à la ligne. Si un lecteur a des précisions, merci de contacter la liste de discussion de la documentation.

Itérer sur les fichiers

Le problème, c'est que des fichiers peuvent contenir des espaces, et aussi des \n (un '\' suivi d'un 'n'), et que certaines solutions ne sont pas correctes à cause de ces cas particuliers.

Par exemple :

for arg in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
  do_something "$arg"
done

n'est pas correct, car si les chemins sont '/tmp/a b/c' et '/tmp/d e', la boucle fera 4 itérations : '/tmp/a', 'b/c', '/tmp/d' et 'e'.

Une première solution est de faire :

printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |
while read -r arg
do
  do_something "$arg"
done

Il ne faut pas utiliser echo (en sh, il ne fonctionnerait pas sur un fichier contenant un '\' suivi d'un 'n'), et il faut bien passer l'argument -r à read (même raison).

Une seconde solution est de changer l'IFS :

IFS='
'
for arg in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
  do_something "$arg"
done

Ainsi, chaque argument sera une ligne de $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS.

On peut aussi vouloir passer tous les arguments à un autre script (sans itérer) :

IFS='
'
do_something $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

Si vous respectez ceci, votre script fonctionnera aussi bien en /bin/bash qu'en /bin/sh (du moins pour cette partie) et pour tous les fichiers, mêmes les cas particuliers.

Après divers test voici une solution qui fonctionne même si le nom de fichier ou dossier contient des espaces, virgules ou autres caractères spéciaux : utiliser la commande find ! par exemple pour une opération sur des fichiers mp3 :

#!/bin/bash
IFS='
'
printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |
while read -r arg
do
	find "$arg" -depth -iname "*.mp3" -exec votre_commande {} \;
done

Le *.mp3 va prendre en compte les fichier mp3 contenus dans votre sélection et le {} remplace le nom de fichier dans votre commande à appliquer sur les mp3.

Supprimer les fichiers de sauvegarde de Gedit

Gedit copie chaque fichier avant la sauvegarde sous le nom « $fichier~ ». Il suffira d'appliquer le script d'un clic droit → Scripts → rm-backups.sh :

#! /bin/bash
 
rm ./*~
zenity --info --text="Fichiers de backup *~ supprimés :)"
On peut désactiver la création de fichier de sauvegarde par Gedit en décochant la case "Créer une copie de sauvegarde des fichiers avant l’enregistrement" dans Édition → Préférences → Éditeur.

Ouvrir en tant qu'administrateur

Éditer un fichier avec Gedit avec les privilèges ROOT

#!/bin/bash
gksudo -u root -k -D "Éditer les fichiers sous root" gedit "$@"

Ouvrir Nautilus dans le répertoire choisi avec les privilèges « root »

#!/bin/bash
    # root-nautilus-here
    # Ouvrir Nautilus dans le répertoire choisi avec les privilèges ROOT
    # nécessite des privilèges sudo et gksudo, ce qui peut entrainer des risques de sécurités        
    #Installez le dans votre répertoire ~/Nautilus/scripts.
    #
    # Placé dans le domaine public par Shane T. Mueller 2001
    # correctifs fournis par Doug Nordwall
    #
    # 2004.04.18 -- keith@penguingurus.com - Ajout de l'utilisation de gksudo
    #               afin de lancer une fenetre de mot de passe si sudo a expire.
    #               Les echos sont renvoyés
    #               vers la sortie standard de root. Mais gksudo 
    #               met à jour votre acces sudo
    #               donc le lancement de Nautilus avec sudo fonctionnera sans
    #               demander de mot de passe        
 
 
    foo=`gksudo -u root -k -m\
 "entrez votre mot de passe afin de lancer Nautilus en tant que root"\
 /bin/echo "got r00t?"`
    sudo nautilus --no-desktop $NAUTILUS_SCRIPT_CURRENT_URI

Exécuter les fichiers en tant que ROOT

#!/bin/bash
for i
do
	gksudo -u root -k "$i"
done

Ouvrir un terminal ici

Nautilus Open Terminal permet d'ouvrir un terminal directement dans le répertoire courant de Nautilus via un clic droit → Ouvrir dans un terminal.

Pour l'utiliser, il suffit d'installer le paquet nautilus-open-terminal et ensuite de redémarrer la session.

Lire les fichiers du répertoire avec Rhythmbox

Permet d'envoyer tous les fichiers du répertoire dans la liste de lecture de Rhythmbox :

#!/bin/sh
base="$(echo $NAUTILUS_SCRIPT_CURRENT_URI | cut -d'/' -f3- | sed 's/%20/ /g')"
 
if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
   dir="$base"
else
   while [ ! -z "$1" -a ! -d "$base/$1" ]; do shift; done
   dir="$base/$1"
fi
 
if [ "$NAUTILUS_SCRIPT_CURRENT_URI" == "x-nautilus-desktop:///" ]; then
dir="Desktop"
fi
 
if [ "$NAUTILUS_SCRIPT_CURRENT_URI" == "trash:" ]; then
dir="$HOME/.Trash"
fi
 
if [ "$NAUTILUS_SCRIPT_CURRENT_URI" == "file:///" ]; then
dir="/"
fi
 
FIRST_URI="`echo -n $NAUTILUS_SCRIPT_SELECTED_URIS`"
if [ "$FIRST_URI" == "x-nautilus-desktop:///home" ]; then
dir="$HOME"
fi
 
if [ "$FIRST_URI" == "x-nautilus-desktop:///computer" ]; then
dir="/"
fi
rhythmbox "$dir"

Envoyer par mail des images compressées petites avec Thunderbird

#!/bin/sh
IFS='
'
notify-send "Patientez..."
# astuce pour prendre en compte les espaces des dossiers et fichiers
printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" |
emailattachment="" # initialisation de la variable à cause du for
for fullfile in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
    filename="${fullfile##*/}" # isoler le nom de la photo
    convert "$filename" -resize 640 -quality 60% /tmp/"$filename" # compression de la photo
    emailattachment="$emailattachment/tmp/$filename," # collecte des photos
    sleep 500ms
done
fichiersjoints=${emailattachment%?} # enlever la virgule à la fin
thunderbird -compose attachment="'$fichiersjoints'" # créer l'email avec les photos jointes
 
exit 0
  • nautilus_scripts.txt
  • Dernière modification: Le 12/11/2019, 19:27
  • (modification externe)