Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
utilisateurs:j5012:brouillons:mes_nautilus_scripts [Le 06/01/2017, 21:48] – [Un script pour renommer en masse avec pyrenamer] J5012utilisateurs:j5012:brouillons:mes_nautilus_scripts [Le 02/03/2018, 22:09] (Version actuelle) – debug du script pyrenamer...zenity J5012
Ligne 1: Ligne 1:
 +====== Mes Nautilus-scripts ======
 +
 +===== Prérequis =====
 +
 +  * Lisez la documentation [[:nautilus_scripts|Les scripts pour Nautilus]]
 +  * Lisez la documentation [[https://help.ubuntu.com/community/NautilusScriptsHowto|NautilusScriptsHowto]]
 +  * Lisez la documentation [[http://www.tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html|Bash : Guide pour debutant]] et notamment sa section 10.3.3
 +
 +===== Un script pour renommer en masse avec pyrenamer =====
 +
 +  * Installez le paquet **[[apt>pyrenamer]]**
 +  * Allez dans le dossier des scripts nautilus
 +  * Créez-y le fichier //pyrenamit// ou //pyrenamall//, au choix
 +  * Rendez le exécutable, pour ne pas avoir à le faire après
 +  * Éditez-le et copiez-collez-y le code suivant
 +
 +<code>
 +#!/bin/bash
 +#
 +# Lance l'application Pyrenamer
 +# dans le dossier selectionné
 +# ou dans le dossier du fichier selectionné.
 +#
 +# Nautilus Script "Renommer en masse" #
 +#
 +# **************************************************************
 +# NB :
 +# Il semble qu'il y ait un bug entre bash, gtk, python
 +# depuis Ubuntu Xenial :
 +# - si le script lance directement la commande "pyrenamer"
 +# - le passage de l'argument $wdir ne se fait pas.
 +# Résolu temporairement avec la commande "bash -c"
 +#
 +# # après une certaine mise à jour proche
 +# #  d'un nouveau noyau, le passage d'argument
 +# #  à pyrenamer fonctionne de nouveau sans utiliser
 +# # la commande : bash -c → pyrenamer "$wdir"
 +# *******************************************************************
 +#
 +# Debut de programme
 +#
 +# Si l'argument $1 est vide :
 +# - le clic droit ne sélectionne ni dossier ni fichier
 +# - comportement plus valide avec xenial
 +# - pyrenamer s'ouvre par défaut dans $HOME
 +# - on fait ouvrir pyrenamer dans le dossier courant du clic "vide"
 +#
 +if [ "$1" = "" ];then
 +    wdir=${NAUTILUS_SCRIPT_CURRENT_URI#file://}
 +    else
 +#
 +# L'argument $1 n'est pas vide :
 +# - le clic droit sélectione un dossier ou un fichier
 +# - la variable filetype enregistre le type de l'argument
 +# - avec seulement la note "directory" ou "file"
 +#
 +    filetype=$(file "$1")
 +    filetype=${filetype##*: }
 +#
 +# La variable filetype enregistre le type "directory" :
 +# - le chemin de l'argument sélectionné est reconstitué
 +# - avec la localisation complète et courante du dossier sélectionné
 +# - et de son nom, débarrassé de la notation shell "file://"
 +#
 +    if [ "$filetype" = "directory" ];then
 +#  #wdir="${NAUTILUS_SCRIPT_CURRENT_URI#file://}/$1"
 +## je me suis rendu compte que puisque $1 etait un dossier,
 +## on pouvait directementl'utiliser comme argument
 +    wdir="$1"
 +    else
 +#
 +# La variable filetype enregistre le type "file" :
 +# - le chemin de l'argument sélectionné est reconstitué
 +# - avec seulement la localisation complète et courante du fichier sélectiionné
 +# - débarrassé de la notation shell "file://"
 +#
 +##  #wdir=${NAUTILUS_SCRIPT_CURRENT_URI#file://}
 +##
 +##  je me suis rendu compte que c'était la variable de zenity
 +##  qui n'encodait pas les caractères accentués.
 +##  la commande : pwd permet d'associer le chemin directement
 +    wdir=$(pwd "$1")
 +    fi
 +fi
 +#
 +# Pour tout contenu de localisation complète
 +# pour le dossier de travail ou d'exécution (wdir = working directory)
 +# la variable $wdir est  débarrassée de la notation shell du symbole "espace"
 +# tous les échappements shell %20 deviennent des espaces " "
 +#
 +##wdir=${wdir//%20/ }
 +## comme le passage d'argument n'utilise plus aucune variable zenity,
 +## la problematique de non encodage des espaces et des caractères accentués
 +## disparaît !
 +#
 +# Le contenu de la variable $wdir
 +# avec ses espaces et ses caractères accentués
 +# est protégé par des guillemets
 +#
 +# Pour parer au bug de passage des arguments,
 +# le script lance "pyrenamer" en console avec bash :
 +# bash est lancé et exécute pyrenamer avec l'argument $wdir
 +# entre guillemets.
 +#
 +# Insérer cette ligne de code zenity,
 +# pour montrer que l'argument $wdir
 +# sera utilisé correctement avec espaces
 +# et caractères accentués.
 +# zenity --info --text="pyrenamer '$wdir'"
 +##bash -c "pyrenamer '$wdir'"
 +## comme rajouté dans les commentaires
 +## du début de script, le passage d'argument
 +## fonctionne en appelant directement le
 +## programme.
 +pyrenamer "$wdir"
 +</code>
 +
 +==== Explications de code ====
 +
 +  * le script vérifie le chemin d'execution du script pyrenamit
 +  * le chemin est vide, le script lui assigne le dossier courant d'execution ...
 +  * le chemin n'est pas vide, le script vérifie si c'est un fichier ou un dossier
 +  * si c'est un dossier, le script lancera pyrenamer avec le nom du dossier selectionné et son chemin complet
 +  * si c'est un fichier, le script lancera pyrenamer avec le dossier contenant le fichier selectionné
 +  * le script prend en compte les espaces et les caracteres accentués
 +
 +__Lire les commentaires du code__