Ceci est une ancienne révision du document !
Les scripts pour Nautilus
Le gestionnaire de fichiers Nautilus permet d'exécuter des scripts, programmes pouvant modifer ou se servir des fichiers sélectionné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 de ces scripts s'exécutent avec les privilèges de l'utilisateur root
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.
Quelques explications
Le répertoire de scripts de Nautilus est ~/.gnome2/nautilus-scripts.
Il s'ouvre, s'il existe, par clic-droit ou File → Script → Ouvrir le dossier Script
Placez-y vos scripts et rendez-les exécutables (permissions) (chmod +x {nom du script}
). Vous devriez nommer ces fichiers de façon à ce qu'ils évoquent quelque chose pour vous car c'est sous leur nom qu'ils apparaîtront dans vos menus Nautilus. De plus vous n'avez pas besoin de rajouter l'extension .sh de scripts shell (Note du traducteur : dans le monde Unix/Linux les extensions des noms de fichier ont rarement de l'importance;pour les scripts, c'est la première ligne #! qui compte). 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 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».
Voir aussi: Les pièges à éviter – Exemples
Liens
Sélection de scripts
Voir les scripts Nautilus présent dans Ubuntu Tweak, ainsi que les 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
- Changer la taille des images. Resize Image
Audio
Gestion des fichiers
- Encrypter/Decrypter les fichiers (nécessite gpg)
Administration
- Renommer les fichiers. Renamer.
Développement
- Faire un fichier deb ( plus facilement ).
- Visualisation des dossiers en arbre. dot-tree
Internet
Divers
Ubuntu One
Envoyer vers Ubuntu One :
#!/bin/bash cp -r $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ~/Ubuntu\ One/
Les pièges à éviter
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.
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.
Exemples
Envoyer par courriel
Il suffit d'installer, si nécessaire, l'extension nautilus-sendto.
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 :)"
Monter et démonter une image ISO
Avec GMount-ISO
Un programme vous permet de monter des images ISO sans trop de mal : GMountISO.
Le faire avec Nautilus ou versions antérieures
Monter une image ISO
Monter une image ISO à partir de Nautilus.
#!/bin/bash # # En chargeant le module loop on s'assure de son chargement et qu'il est pret a etre utilise # Si il est déjà chargé il ne se passe rien. lsmod | grep '^loop ' || gksudo -u root -k -m "Chargement du module noyau 'loop'" modprobe loop for i in "$@" do gksudo -u root -k -m "Montage de l'image ISO" mount -o loop -t iso9660 "$i" /media/iso done
Démonter une image ISO
Démonter une image ISO à partir de Nautilus.
#!/bin/bash # for i in "$@" do gksudo -u root -k -m "Démontage de l'image ISO" umount "$i" done
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
Rechercher ici/dedans
Ouvrir une fenêtre de recherche dans le répertoire sélectionné :
#!/bin/sh # De Johnathan Bailes # Ce script ouvre l'outil de recherche gnome dans le répertoire que vous sélectionnez. # # Distribué selon les termes de GNU GPL version 2 ou ultérieur # # Installez le dans votre répertoire ~/Nautilus/scripts. # Vous devez utiliser Nautilus 1.0.3+ pour utiliser ce script. cd $NAUTILUS_SCRIPT_CURRENT_URI exec gnome-search-tool
Autre version, avec recherches multiples :
#! /bin/sh # Par gusaweb <gusaweb at gmail.com> # Permet d'utiliser l'outil de recherche gnome # sur un/des répertoire(s) ou fichier(s) # sélectionné(s). # Distribué selon les termes de la GNU GPL 2 # ou ultérieure # pour chaque path sélectionné for path in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ; do # s'il s'agit d'un répertoire on effectue # la recherche dedans if ( test -d $path ) then exec gnome-search-tool --path=$path & # s'il s'agit d'un fichier on effectue la # recherche sur le répertoire qui le contient else exec gnome-search-tool --path=`dirname $path` & fi ; done
Encore une autre version supportant :
- les espaces dans les noms de fichiers ou de répertoires ;
- l'ouverture d'une seule fenêtre de recherche par répertoire (cas de la sélection de plusieurs fichiers dans le même répertoire).
#!/bin/bash # Search in folder # Auteur: doc75 (inspiré du script de gusaweb) # version: 0.1 # date: 2009/09/20 IFS=' ' tmpfile=/tmp/search-file.txt for selected_file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ; do if [ -d ${selected_file} ] then echo ${selected_file} >> ${tmpfile} else echo `dirname ${selected_file}` >> ${tmpfile} fi done for selected_dir in `cat ${tmpfile} | sort -u` do gnome-search-tool --path=${selected_dir} & done rm ${tmpfile}
Ouvrir un terminal ici
Via l'extension « nautilus-open-terminal »
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'installer, il suffit d'installer le paquet nautilus-open-terminal et ensuite de redémarrer la session.
Lire les fichiers du répertoire avec XMMS
Permet d'envoyer tous les fichiers du répertoire dans la liste de lecture de XMMS :
#!/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" != "" ]; then #dir="`echo $FIRST_URI | cut -c8-`" #fi if [ "$FIRST_URI" == "x-nautilus-desktop:///computer" ]; then dir="/" fi xmms "$dir"
Créer un lien sur le bureau
Permet de créer des raccourcis sur le bureau :
#!/bin/sh LINKS="${HOME}/Bureau" ZENITY=zenity warning() { ${ZENITY} --warning --warning-text "$*" } if [ ! -d "${LINKS}" ]; then warning "No desktop directory '${LINKS}' found - sorry." exit 1 fi declare -a NAUTFILES export IX=0 while read FILE; do if [ "x${FILE}" != "x" -a "x${FILE}" != 'x"' ]; then NAUTFILES[${IX}]="${FILE}" IX=$[ ${IX} + 1 ] fi done <<EOF ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS[@]} EOF if [ 0 -eq ${IX} ]; then URI="${NAUTILUS_SCRIPT_CURRENT_URI}" METHOD="${URI:0:7}" if [ "file://" == "${METHOD}" ]; then NAUTFILES[0]="${URI:7}" IX=1 fi fi if [ 0 == "${#NAUTFILES[@]}" ]; then warning "Nothing to do" exit fi for FILE in "${NAUTFILES[@]}"; do TAILBASE=`basename "${FILE}"` NEWNAME=`${ZENITY} --entry \ --title "Enter link name" \ --text "Enter the name of the new link for '${FILE}'" \ --entry-text "${TAILBASE}"` if [ 0 -ne $? -o "x${NEWNAME}" == "x" ]; then warning "New name cancelled or not entered successfully" else NEWFILE="${LINKS}/${NEWNAME}" if [ -e "${NEWFILE}" ]; then warning "An object called '${NEWFILE}' exists already" elif ! /bin/ln -s "${FILE}" "${NEWFILE}"; then warning "New link could not be created" fi fi done
Contributeurs : FredB (traduction), Fabien26 (1re actualisation), Floriang (2e actualisation).