Le gestionnaire de fichiers GNOME Fichiers 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 permissions administrateur 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 GNOME Fichiers 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 GNOME Fichiers se trouvant dans ~/.local/share/nautilus/scripts/ pour l'environnement de bureau GNOME. 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 GNOME Fichiers. De plus vous n'avez pas besoin de rajouter l'extension .sh de scripts shell. Il est également possible de créer des répertoires pour mieux organiser les scripts.
Vos scripts seront alors disponibles dans toutes les fenêtres GNOME Fichiers 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 ~/.local/share/nautilus/scripts/.
Le chemin des scripts pour :
~/.config/caja/scripts~/.local/share/nautilus/scripts~/.local/share/nemo/scripts/Voir aussi :
Vous avez déjà des scripts GNOME Fichiers sur la page scripts utiles.
~/.gnome2/ n'existe plus mais peut être remplacé par n'importe quel répertoire personnel.
Vous pouvez aussi ajouter d'autres tailles que celles prévues dans le script (800 et 1024) : il suffit de le modifier en ajoutant les tailles qui vous intéressent à la ligne SIZES.
Pour chaque taille d'image, il faut créer un lien vers ce script.
Ouvrir un terminal, aller dans le répertoire ~/.local/share/nautilus/scripts/ (dans le terminal, taper 'cd+espace puis tirer ce répertoire scripts sur le terminal puis la touche Entrée).
Entrer alors, par exemple, la commande suivante pour la taille 600 pixels :
ln -s ~/chemin d'enregistrement script/ResizeImage.sh "Retailler image (600px)"
(Comme pour la commande précédente, après ln -s , il suffit de tirer le script ResizeImage sur le terminal pour que le chemin s'inscrive automatiquement).
Faire de même pour toutes les autres tailles prévues dans le script.
Bien ajouter .sh au nom du script pour qu'il apparaisse et s'exécute.
nautilus-image-converter puis redémarrer la session.Il vous suffit d'un éditeur de texte pour écrire votre script.
Pour créer un script il faut être familier avec un langage de script : la façon la plus simple et répandue est avec Bash. Les langages python et Perl son parfois utilisés.
Chaque fois qu'un script est appelé, Nautilus définit automatiquement des variables qui peuvent être utilisées dans vos scripts.
NAUTILUS_SCRIPT_SELECTED_FILE_PATHSNAUTILUS_SCRIPT_SELECTED_URISNAUTILUS_SCRIPT_CURRENT_URINAUTILUS_SCRIPT_WINDOW_GEOMETRY
Il existe des outils d'analyse de scripts pour savoir s'il respecte les bonnes pratiques. Pour le langage bash il existe
shellcheck.
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). Comme pour tout script, il faut pour cela rédiger correctement le script et éviter certaines erreurs.
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 vaudra '/home/user' et $NAUTILUS_SCRIPT_CURRENT_URI vaudra 'file:///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.
Il faut donc proscrire d'utiliser des scripts du genre :
for arg do do_something $arg done </code> ou <code bash> for arg in $@ do do_something "$arg" done
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 afficherFichier () {
zenity --info --text "le fichier est $*"
}
IFS=$'\n' # on limite le IFS aux sauts de ligne
afficherFichier "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
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 sans les guillemets aux variables, 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'.
La même solution d'une autre manière :
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 </code> 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) : <code bash> 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.
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 :)"
#!/bin/bash # C'est sérieux il ne faut pas jouer avec les droits root notify-send "si vous ne savez pas ce que vous faites, fermez la fenêtre" gnome-terminal -- pkexec --user root vim "$(realpath "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS")"
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 [ -n "$1" ] && [ ! -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="$NAUTILUS_SCRIPT_SELECTED_URIS" if [ "$FIRST_URI" = "x-nautilus-desktop:///home" ]; then dir="$HOME" elif [ "$FIRST_URI" = "x-nautilus-desktop:///computer" ]; then dir="/" fi rhythmbox "$dir"
#!/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
#!/bin/sh
function afficherHashes () {
zenity --info --title=sha256sum --text "$(sha256sum $*)" --no-wrap --ok-label=Slava Ukraini!
}
IFS=$'\n' # on limite l'IFS à "Retour à la ligne" seulement
afficherHashes "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
Contributeurs : FredB, L'Africain, Fabien26, (1ère actualisation) Floriang, (2ème actualisation) Amiralgaby.