Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/06/2023, à 15:26

dàmwsy

[Résolu] kdialog et nom de fichier avec parenthèse

Bonjour,

Je suis sous Kubuntu 22.04, KDE Plasma Version: 5.24.7, KDE Frameworks Version: 5.92.0

Je suis novice dans l'utilisation des scripts bash. Grâce à quelques aides sur le net, j'ai rédigé un script pour mettre dans le menu contextuel de Dolphin une commande Shred pour effacer les fichiers, avec en préalable une demande de confirmation par kdialog.
Voici le script sauvé dans un fichier shred.desktop, lui-même placé dans le répertoire  /usr/share/kservices5/

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin,all/allfiles
Actions=shred

[Desktop Action shred]
Name=Suppr with shred
Name[fr]=Suppression sécurisée
Name[en]=Shred file
Icon=draw-eraser
Exec=/bin/bash -c 'kdialog --title "Safe Delete" --warningcontinuecancel "Safe Delete: Are you sure?" && shred -u -f -z -n 35 %U'

La commande Shred apparaît dans le menu contextuel de Dolphin quand je pointe un fichier.
Elle fonctionne généralement, sauf quand le nom du fichier contient une parenthèse, auquel cas la boîte de dialogue ne s'affiche pas et la commande ne s’exécute pas.
Par exemple, monFichier.abc est bien effacé, mais riien ne se passe pour monFichier(1).abc ou monFichier(a.abc

Le problème semble venir de kdialog car la commande fonctionne bien si l'on supprime directement le fichier sans demander de confirmation avec le script :

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin,all/allfiles
Actions=shred

[Desktop Action shred]
Name=Suppr with shred
Name[fr]=Suppression sécurisée
Name[en]=Shred file
Icon=draw-eraser
Exec=shred -n 35 -z -u %U

Je n'ai pas trouvé d'information sur kdialog permettant de résoudre le problème.

kdialog est-il bien la cause de ce comportement ?
Comment puis-je faire exécuter la commande avec la demande de confirmation, quel que soit le nom du fichier ?

Merci.

Dernière modification par dàmwsy (Le 25/06/2023, à 14:32)

Hors ligne

#2 Le 24/06/2023, à 19:14

erresse

Re : [Résolu] kdialog et nom de fichier avec parenthèse

Bonjour,

dàmwsy a écrit :

Elle fonctionne généralement, sauf quand le nom du fichier contient une parenthèse, auquel cas la boîte de dialogue ne s'affiche pas et la commande ne s’exécute pas.

Je ne connais pas kdialog n'étant pas moi-même utilisateur de KDE, mais d'après ta remarque, je dirais que kdialog n'est pas concerné puisque la boite de dialogue ne s'affiche simplement pas...
Je suppose (sous toute réserve) que lorsque le nom de fichier contient une parenthèse, le code retour de la commande "/bin/bash..." doit être false et la commande "shred..." qui lui est subordonnée ne s'exécute pas.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 25/06/2023, à 11:54

Alex10336

Re : [Résolu] kdialog et nom de fichier avec parenthèse

Bonjour,

Avec des guillemets sur le %U, peut être ?

Exec=/bin/bash -c 'kdialog --title "Safe Delete" --warningcontinuecancel "Safe Delete: Are you sure?" && shred -u -f -z -n 35 "%U"'

Édit: selon la doc, le « ' » est un caractère réservé, peut être ça le soucis. https://specifications.freedesktop.org/ … 01s07.html
Mettre la ligne dans un fichier bash executable ?

Dernière modification par Alex10336 (Le 25/06/2023, à 12:03)


« On ne répond pas à une question par une autre question. » (moi ;-) )

Hors ligne

#4 Le 25/06/2023, à 14:28

dàmwsy

Re : [Résolu] kdialog et nom de fichier avec parenthèse

Merci à Alex10336 et erresse, votre idée que le problème venait de bash et non de kdialog était exacte. Les parenthèses dans le nom du fichier perturbent l'interpréteur. En déplaçant l'apostrophe d'après le %U à avant les &&, c'est à dire pour ne soumettre à bash que la commande kdialog, cela fonctionne : tous les fichiers, y compris ceux contenant des parenthèses, sont effacés correctement.

Plus clairement : la commande initiale problématique :

Exec=/bin/bash -c 'kdialog --title "Safe Delete" --warningcontinuecancel "Safe Delete: Are you sure?" && shred -u -f -z -n 35 %U' 

est devenue :

Exec=/bin/bash -c 'kdialog --title "Safe Delete" --warningcontinuecancel "Safe Delete: Are you sure?"' && shred -u -f -z -n 35 %U

Hors ligne