#1 Le 24/12/2024, à 00:30
- Frankkunst
script nautilus ne demarre pas selon selection
Bonjour à tous,
J'ai fait un script manipulant des fichiers jpeg qui fonctionne très bien tant que je ne dépasse pas une sélection d'environ mille fichiers photo soit ~6 Go, au delà il ne se lance pas, quand je le lance depuis Nautilus ...
Le même script en terminal ne rencontre pas de problème !?
Serait ce dû à une limitation de la variable NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ? Vue que la sélection dans nautilus passe par là ?
Je suis sous Ubuntu 22.04.5
Est-que quelqu'un aurait une piste ?
Merci d'avance
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#2 Le 24/12/2024, à 00:43
- Watael
Re : script nautilus ne demarre pas selon selection
salut,
je n'utilise pas nautilus.
Le même script en terminal ne rencontre pas de problème !?
quelle ligne de commande utilises-tu ? précisément.
peut-être une subtilité des paramètres noyau qui n'autorise qu'une certaine longueur de commande ?...
Dernière modification par Watael (Le 24/12/2024, à 10:09)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 24/12/2024, à 08:59
- Frankkunst
Re : script nautilus ne demarre pas selon selection
Merci bien Watael,
Je reviens vers vous dans deux jours, là pas le temps, c'est Noël
Bonne fête à tous
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#4 Hier à 12:28
- Frankkunst
Re : script nautilus ne demarre pas selon selection
Bonjour,
Voici Noël passé !
Alors voici le script en question :
#!/bin/bash
#
#-----------------------------------------------------------Renommage de fichier "jpeg" sur la base des données EXIF----------------------
#-----------------------------------------------------------nom : RenomJPEG - auteur : Frankkunst - version :1 - date 12/2024
#---------------------------------------------------------------------------*************-------------------------------------------------
printf >~/temp/selectFich-new.txt
printf >~/temp/data
RESULTAT=()
#-------------------------------------------------------------------# Entrée #-------------------------------------------------------------------------------
rep=`zenity --forms --width=800 --title=" RenomJPEG de Frankkunst " \
--text=" Ce script utilise les données <span color=\"green\">\"exif\"</span> pour renommer les fichers.\nIl va rechercher la date originale de la prise de vue pour composer lenom de fichier.\n\nVous pouvez aussi entrer à l'invite une <span color=\"green\">\"étiquette\"</span> sous la forme d'un mot (Ceci est optionnel).\nCe dernier sera repporté à la fin du nom de fichier\nPuis appuyer sur <span color=\"green\">"Valider"</span> pour continuer" \
--add-entry="Étiquette :"`
valiAct=$?
#---------------------------------------------------
if [[ $valiAct == 1 ]]
then
zenity --info --width=500 --title="Arrêt prématuré" --text="\nVous avez choisi d'abandonner\nAucun fichier n'a été renommé" ; exit
fi
##-------------------------------------------------------------# Sélection fichiers #--------------------------------------------------------------------------
function afficherFichier () {
printf "$*" >>~/temp/selectFich.txt
n=0
for x in $(cat ~/temp/selectFich.txt)
do
printf "${x##*/}\n" >>~/temp/selectFich-new.txt ; ((n++))
done
printf >~/temp/selectFich.txt
}
#
##--------------------------------------------------------------------# Renommage #----------------------------------------------------------------------------
g=0 ; m=0 ; h=0 ; k=0 ## mise à zero des compteurs
rnm() {
for z in $(cat ~/temp/selectFich-new.txt)
do
testfil=`file -b -i "$z" | cut -d"/" -f2 | cut -d";" -f1` ; ((g++)) ## test fichier jpeg
set `exiv2 -g Exif.Photo.DateTimeOriginal "$z"` ## extraction données de datations
datefich="$4"
if [[ $testfil == "jpeg" ]] ## contrôle jpeg
then
if [[ -n $4 ]] && [[ $4 != 0000:00:00 ]] ## contrôle présence de données
then f=$(printf "%03d" $g) ; e=${f: -3} ## mise en forme compteur sur trois chiffres
exiv2 -r$ordre$e rename "$z" 2>/dev/null ; ((m++)) ## renommage
else printf "\"$z\" n'a pas de données de date !\n" >>fichInvalide.txt ; ((h++))
fi
else printf "\"$z\" n'est pas un fichier \"jpeg\" et ne peut donc pas être traité !\n" >>fichInvalide.txt ; ((k++))
fi
done
printf "$g\n" >>~/temp/data
printf "$m\n" >>~/temp/data
printf "$k\n" >>~/temp/data
printf "$h\n" >>~/temp/data
}
##--------------------------------------------------------------------## Préparation Nom de renommage ##--------------------------------------------------------
##
format=`zenity --list --title="Choix format date" --text="Veuillez choisir entre ces deux formats" --column="format de date"\
"AAAAMMJJ"\
"AAAAMMJJ-hhmmss"`
case $format in
AAAAMMJJ)
formDate="%Y%m%d" ;;
AAAAMMJJ-hhmmss)
formDate="%Y%m%d_%H%M%S" ;;
esac
supp="$rep"
if [[ ${#rep} -ne 0 ]]
then
ordre=`echo -e ""$formDate"_"$supp"-"` ## préparation base de renommage avec ou sans complément
else
ordre=`echo -e ""$formDate"-"`
fi
##--------------------------------------------------------------------# lancement tache #-------------------------------------------------------------------------
#IFS=$'\n' # on limite le IFS aux sauts de ligne (problème avec fonction rnm ?)
afficherFichier "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
zenity --question --text="Vous avez sélectinné $n fichiers pour les renommer .\nDésirez-vous continuer ?"
if [[ $? == 1 ]]
then zenity --info --timeout=4 --text="Abandon de l'opération\nCette fenêtre ce fermera dans 4\""; exit
fi
rnm | zenity --progress --pulsate --auto-close --text="veuillez patienter, renommage en cours ... "
##------------------------------------------------------------------# Affichage résultat #------------------------------------------------------------------------
for y in $(cat ~/temp/data)
do
RESULTAT+=($y)
done
zenity --info --width=900 --title="Résultat des course" \
--text="${RESULTAT[0]} fichiers du dossier :\n\n<span color=\"green\">\"$PWD\"</span>\n\nOnt été éxaminé \!\n\nDont ${RESULTAT[1]} rennomé\n\nEt ${RESULTAT[3]} ne possèdent pas de date\n\n<span color=\"red\"> ${RESULTAT[2]} fichier\\s n'ont pas été traité </span>"
FICHIER=fichInvalide.txt
if [[ -f "$FICHIER" ]] ; then
zenity --text-info --width=900 --height=300 --title="Fichier non renommé" --filename=fichInvalide.txt
fi
rm fichInvalide.txt 2>/dev/null
exit
Une idée ?
Dernière modification par Frankkunst (Hier à 12:34)
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#5 Hier à 12:54
- Watael
Re : script nautilus ne demarre pas selon selection
ce n'est pas un problème avec la longueur maximale d'une ligne de commande (comme je le suggérais), puisque les fichiers sont traités un par un dans le script.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Hier à 13:26
- Watael
Re : script nautilus ne demarre pas selon selection
tu devrais partir de ceci :
#!/bin/bash
curDir=${NAUTILUS_SCRIPT_CURRENT_URI#*\/\/}
for f in "$@"
do
if test "$(file --brief --mime-type "$f")" = 'image/jpeg'
then
printf 'renommage "%s"\n' "$f"
: exiv2 ...rename ...
fi
done
K eep
I t
S imple
S tupid
!
Dernière modification par Watael (Aujourd'hui à 00:33)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Aujourd'hui à 00:02
- Frankkunst
Re : script nautilus ne demarre pas selon selection
Bonsoir Watael,
Merci pour ta proposition, j'ai testé ton code juste pour lister dans un fichier.txt les fichiers sélectionnés.
Et toujours le même problème, quand le dossier dépasse un certain nombre de fichiers sélectionnés le script ne se lance tout simplement pas !?
De plus la limite n'est pas la même selon le contenu du dossier, par exemple dans un dossier contenant 1500 fichier je ne pourrais en sélectionner que 1190, alors que dans un autre dossier contenant 1800 fichiers je pourrais en sélectionner 1348 ?...
Dans le premier cas le volume de données était de 6,2 Go et dans le second de 7,5 Go ???
Dernière modification par Frankkunst (Aujourd'hui à 00:03)
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#8 Aujourd'hui à 00:34
- Watael
Re : script nautilus ne demarre pas selon selection
je reviens sur ce que j'ai dit (une vraie girouette ): ça pourrait bien être une limitation de la longueur de la ligne de commande, parce que
même si le script traite un fichier à la fois, c'est bien la liste des fichiers sélectionnés qui est passée au script, puis à la boucle for
on pourrait développer une routine (si ça n'existe pas déjà) pour limiter la taille de la ligne d'arguments passée à for, mais ça ne résoudrait pas le problème de la longueur des arguments passés au script par nautilus.
NB: le problème, ce n'est pas la taille des données : nautilus ne passe que des noms de fichiers, c'est exiv2 qui traite les données.
tu pourrais avoir plus de données avec des noms de fichiers plus courts, il serait possible de traiter plus de fichiers.
et inversement, moins de fichiers avec plus de données, tant que la commande qui traite les données accepte leur taille, il n'y aurait pas de problème
edit : en ligne de commande et en reproduisant le comportement de nautilus, mesure la taille des arguments que tu passerais au script
et compare-la à la valeur de getconf ARG_MAX
Dernière modification par Watael (Aujourd'hui à 01:06)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Aujourd'hui à 10:55
- Frankkunst
Re : script nautilus ne demarre pas selon selection
Bonjour Watael,
Une chose est sûre, là en circonstance on ne gère pas de volume de données, on établi juste une liste de chemin de fichier .
J'ai donc réfléchi à ce que tu dis et donc procéder par élimination, j'ai donc seulement demandé au script de mettre dans un fichier le contenu de "NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" , via cette ligne :
#!/bin/bash
printf "${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS}" >~/Bureau/ResultatWatael.txt
Résultat, toujours le même phénomène !...
Je me suis alors dis que la limitation, si elle n'est pas sur le volume, ni sur le nombre d'item, qu'elle devais donc se faire sur le nombre de caractère .
Donc pour réduire ce nombre de caractère, pourquoi ne pas raccourcir le chemin des fichiers ?!
J'ai donc pour tester déplacé un des dossier qui m'avais posé problème au niveau /home/user/ ..., et là plus de problème .
La limitation est donc bien dû à la conception de la variable "NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" utilisée par Nautilus-script de Gnome-fichier, et là je ne crois pas que l'on puisse modifier quelque chose pour remédier au problème !
Qu'en penses tu ?
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#10 Aujourd'hui à 11:00
- Tawal
Re : script nautilus ne demarre pas selon selection
Hello.
Je serais étonné si la valeur de ARG_MAX était plus basse que 1500 !
Ma valeur est de 2²¹ = 2097152
Pour être sûr que le script ne se lance pas, introduit un traçage de l'exécution.
Un truc du genre:
echo "$(date) : Exécution lancée." > ~/is_executed
Dernière modification par Tawal (Aujourd'hui à 11:01)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#11 Aujourd'hui à 11:30
- Watael
Re : script nautilus ne demarre pas selon selection
ARG_MAX est le nombre maximal de caractères que peut comporter une ligne de commande; c'est ce que j'entendais par "longueur des arguments" (et pas nombre des arguments).
l'ébauche de script que j'ai donnée réduit le nombre de caractère de la "ligne de commande" envoyée au script par nautilus, parce qu'elle ne comporte que le nom des fichiers, et pas le chemin complet;
le script s'exécute dans le répertoire courant (ouvert dans nautilus) avec un chemin relatif (vide).
c'est l'équivalent de
cd /chemin/repertoire
for fic in *; do : whatever; done
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#12 Aujourd'hui à 11:42
- Frankkunst
Re : script nautilus ne demarre pas selon selection
Oui Watael, J'ai bien testé ceci :
#!/bin/bash
curDir=${NAUTILUS_SCRIPT_CURRENT_URI#*\/\/}
for f in "$@"
do
file=$curDir/$f
if test "$(file --brief --mime-type "$file")" = 'image/jpeg'
then
printf 'renommage "%s"\n' "$file" >>~/Bureau/ResultatWatael.txt
# : exiv2 ...rename ...
fi
done
Que tu as proposé juste en mettant un # pour la ligne exiv ..., mais cela ne change rien !
Comment faites vous pour connaître la valeur ARG_MAX et que signifie t"elle au juste ?
bonjour Tawal,
Si le script se lance j'ai tout de suite la fenêtre zenity qui apparaît non ?
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#13 Aujourd'hui à 11:55
- Frankkunst
Re : script nautilus ne demarre pas selon selection
Bon j'ai ça :
frank@frank-ZenBook:~$ getconf ARG_MAX
2097152
!...
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#14 Aujourd'hui à 12:11
- Frankkunst
Re : script nautilus ne demarre pas selon selection
Comment se fait-il que je ne rencontre pas ce problème de limite en console ?
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#15 Aujourd'hui à 12:16
- Watael
Re : script nautilus ne demarre pas selon selection
et en lançant nautilus depuis le terminal, puis en exécutant le script depuis nautilus, il y a des messages d'erreurs dans le terminal ?
un stfw* rapide ("nautilus error log") montre qu'il existe des variables d'environnement de Nautilus pour forcer certains niveaux de debuggage
2097152: pareil ici.
--
*Search The Fucking Web
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Aujourd'hui à 12:51
- Frankkunst
Re : script nautilus ne demarre pas selon selection
Voilà quand tout va bien :
frank@frank-ZenBook:~$ nautilus
Initializing nautilus-image-converter extension
Nautilus-Share-Message: 12:44:04.705: Called "net usershare info" but it failed: L’exécution du processus fils « net » a échoué (No such file or directory)
Nautilus-Share-Message: 12:44:33.736: Called "net usershare info" but it failed: L’exécution du processus fils « net » a échoué (No such file or directory)
printf : utilisation : printf [-v var] format [arguments]
printf : utilisation : printf [-v var] format [arguments]
printf : utilisation : printf [-v var] format [arguments]
frank@frank-ZenBook:~$
Et quand ça ne marche pas :
frank@frank-ZenBook:~$ nautilus
Initializing nautilus-image-converter extension
Nautilus-Share-Message: 12:42:33.451: Called "net usershare info" but it failed: L’exécution du processus fils « net » a échoué (No such file or directory)
Nautilus-Share-Message: 12:42:56.185: Called "net usershare info" but it failed: L’exécution du processus fils « net » a échoué (No such file or directory)
** Message: 12:43:20.561: Could not start application: L’exécution du processus fils « /bin/sh » a échoué (Liste d'arguments trop longue)
^C
frank@frank-ZenBook:~$
J'ai remarqué aussi un ralentissement de Nautilus quand je sélectionne trop de fichiers ...
C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !
Hors ligne
#17 Aujourd'hui à 13:20
- Watael
Re : script nautilus ne demarre pas selon selection
ben, voilà :
Liste d'arguments trop longue
au passage, tu remarqueras un avertissement de printf concernant son usage :
printf : utilisation : printf [-v var] format [arguments]
printf n'est pas un autre echo.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#18 Aujourd'hui à 13:22
- Tawal
Re : script nautilus ne demarre pas selon selection
Dans ton "action personnalisée" de Nautilus, quel est l'argument passé au script ? (%f, %F, %d …)
Le script de Watael n'affiche rien, il crée un fichier sur ton Bureau avec les noms des fichiers à traiter.
Edit:
J'ai trouvé ça:
Nombre maximum d'arguments pour une action Nautilus
Dans le contexte des actions Nautilus, le nombre maximum d'arguments qu'une action peut accepter est déterminé par les propriétés min_items et max_items dans la configuration de l'action.
min_items : Cette propriété définit le nombre minimum d'éléments dans la sélection pour que l'action soit affichée. Par exemple, si vous définissez min_items à 2, l'action ne sera visible que si deux éléments ou plus sont sélectionnés.
max_items : Cette propriété définit le nombre maximum d'éléments dans la sélection pour que l'action soit affichée. Par exemple, si vous définissez max_items à 1, l'action ne sera visible que si un seul élément est sélectionné. Une valeur de zéro pour max_items indique qu'il n'y a pas de limite supérieure.
Par défaut, si ces propriétés ne sont pas spécifiées, min_items est fixé à 1 et max_items est illimité.
Ainsi, pour configurer une action Nautilus, vous pouvez spécifier ces propriétés selon vos besoins pour contrôler le nombre d'arguments acceptés.
Peut-être essayer de mettre max_items à 0.
Dernière modification par Tawal (Aujourd'hui à 13:31)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#19 Aujourd'hui à 13:33
- Watael
Re : script nautilus ne demarre pas selon selection
action personnalisée
c'est où ?
"liste d'argument trop longue" c'est le même message d'erreur que sur la ligne de commande.
Dernière modification par Watael (Aujourd'hui à 13:36)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#20 Aujourd'hui à 13:37
- Tawal
Re : script nautilus ne demarre pas selon selection
Il faut définir une "action personnalisée" pour lancer un script sur une sélection.
Il y a des critères : le type d'arguments passées, le type d'objets sélectionnés …
Je dis ça de mémoire, je n'ai plus Nautilus ni Gnome.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#21 Aujourd'hui à 13:54
- Watael
Re : script nautilus ne demarre pas selon selection
ça a dû changer, parce que ce que je vois, c'est clic opposé sur la sélection, dans le menu contextuel choisir "scripts", puis choisir le script.
mais Frankkunst, pourquoi passer par Nautilus ?
un script appelé dans le terminal pourrait le faire en contournant la limitation :
while read -d '' fic; do : vérifs + renommage ; done < <(find "$dir" -type f -iname '*.jpg' -print0)
en gros.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#22 Aujourd'hui à 14:08
- Tawal
Re : script nautilus ne demarre pas selon selection
Oui, mais pour que le script soit accessible dans le menu contextuel "scripts",
il faut définir une action Nautilus avec la commande, le type d'arguments à passer, le type d'objets ...
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#23 Aujourd'hui à 14:18
- Watael
Re : script nautilus ne demarre pas selon selection
je ne vois pas.
je vois le nom des scripts, et "Ouvrir le dossier de scripts"
c'est tout.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#24 Aujourd'hui à 16:28
- Tawal
Re : script nautilus ne demarre pas selon selection
Comment est défini ce qui est passé au script selon la sélection ?
Il y a des paramètres :
%f = 1er fichier sélectionné
%F = tous les fichiers sélectionnés
%d = 1er répertoire sélectionné
%D = tous les répertoires sélectionnés
%n = 1er fichier sélectionné (que le nom sans chemin)
%N = tous les fichiers sélectionnés (que les noms sans chemin)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#25 Aujourd'hui à 16:33
- iznobe
Re : script nautilus ne demarre pas selon selection
je ne vois pas.
je vois le nom des scripts, et "Ouvrir le dossier de scripts"
c'est tout.
c' est pour utiliser le script en mode graphique , en faisant un clic droit a partir de nautilus , sans avoir à ouvrir un terminal .
le script est alors lancé via nautilus , comme un addon ( personnalisé ) .
Dernière modification par iznobe (Aujourd'hui à 16:33)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne