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 07/08/2021, à 13:00

JME44

[Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Bonjour,

À partir d'un lien symbolique vers un fichier, je souhaite ouvrir le dossier/répertoire contenant ce fichier, en utilisant dans Nautilus un item du menu du clic droit ou une combinaison type CTRL+clic gauche.

Je peux coder en bash, apprendre python .... tout sauf c.

Qui a une piste ?

Merci

Dernière modification par JME44 (Le 10/08/2021, à 09:36)


Ubuntu 22.04 sur AMD Ryzen 7 2700x et autres sous diverses versions d'Ubuntu, y compris sur Raspberry.

Hors ligne

#2 Le 07/08/2021, à 13:42

erresse

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Bonjour,
Je ne sais pas s'il existe dans Nautilus une fonction permettant d'ouvrir le répertoire qui contient le fichier cible du lien.
Personnellement, je suis sous Ubuntu-Mate et dans le gestionnaire Caja, cette fonction n'existe pas...
Cependant, en ouvrant par clic droit sur le lien la fenêtre "Propriétés", on peut voir dans "Cible du lien" l'adresse absolue du fichier cible.
Il est possible de sélectionner le début de cette adresse (sans inclure le nom du fichier lui-même) et de le copier/coller dans le gestionnaire de fichiers pour ouvrir le répertoire qui contient le fichier cible.
Si tu ne trouves pas d'autre possibilité plus pratique, tu peux peut-être essayer de coder un bout de "script Nautilus" qui exécute automatiquement les opérations ci-dessus pour ouvrir ce répertoire...


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 07/08/2021, à 14:36

cqfd93

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Bonjour,

La commande

realpath lien_vers_ton_fichier

permet d'extraire le chemin complet mais si tu veux ouvrir le répertoire, il te faut supprimer le nom du fichier cible. Exemple :

moi@moi-QOSMIO-X870:~/Téléchargements/temp$ realpath Lien\ vers\ 20210711_152316.jpg 
/home/moi/Téléchargements/20210711_152316.jpg
moi@moi-QOSMIO-X870:~/Téléchargements/temp$

Ce que tu voudrais, c'est la première partie du retour /home/moi/Téléchargements/

Avec basename

moi@moi-QOSMIO-X870:~/Téléchargements/temp$ basename /home/moi/Téléchargements/20210711_152316.jpg
20210711_152316.jpg
moi@moi-QOSMIO-X870:~/Téléchargements/temp$ 

on peut récupérer le nom du fichier, je ne connais pas la commande qui permettrait au contraire de garder tout le chemin, sauf le nom du fichier.

Si une telle commande n'existe pas, il doit être possible de bricoler un rename qui remplacerait ce nom de fichier par une chaîne vide.


cqfd93

Hors ligne

#4 Le 07/08/2021, à 15:20

inbox

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Salut,

En cherchant "nautilus ouvrir le dossier parent", j'ai trouvé cette page. Voir ce qui est proposé par Jadonchristensen.

A+


Un problème résolu ? Indiquez le en modifiant le titre du sujet.

Hors ligne

#5 Le 07/08/2021, à 17:55

erresse

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

inbox a écrit :

Salut,

En cherchant "nautilus ouvrir le dossier parent", j'ai trouvé cette page. Voir ce qui est proposé par Jadonchristensen.

A+

Effectivement, je n'avais pas testé les options proposées après une recherche. Cela existe aussi dans Caja sous Ubuntu-Mate 20.04, je l'ai vérifié. Si le besoin est lié à une recherche, alors ce devrait être satisfaisant. Sinon, dans le cas où l'on veut juste ouvrir le répertoire parent du fichier cible dont on a sélectionné un lien symbolique, on peut s'en sortir avec un petit script intégré à Nautilus ou Caja, j'ai aussi bricolé ça vite fait, ça marche...


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

#6 Le 07/08/2021, à 19:45

Tawal

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Hello

Pour obtenir que le chemin du dossier contenant un fichier (ici le fichier "barre") :

tawal@Deb1:~/Term$ realpath barre
/home/tawal/Term/barre
tawal@Deb1:~/Term$ chemin_complet=$(realpath barre)
tawal@Deb1:~/Term$ echo ${chemin_complet%/*}
/home/tawal/Term
tawal@Deb1:~/Term$

Dernière modification par Tawal (Le 07/08/2021, à 19:47)


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

#7 Le 08/08/2021, à 10:55

JME44

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Bonjour,

Je suis sur une piste et mettrai ici le résultat de mes cogitations.

  • écrire en bash un script pour Nautilus ;

  • récupérer la cible avec readlink.

Patience


Ubuntu 22.04 sur AMD Ryzen 7 2700x et autres sous diverses versions d'Ubuntu, y compris sur Raspberry.

Hors ligne

#8 Le 08/08/2021, à 13:59

erresse

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Bah, pas la peine d'attendre, tu devrais arriver à peu près à ça, non ?

#!/bin/bash

# Ouvrir le répertoire contenant la cible du lien
adr="$1"
#echo "adr=$adr">trace
while [ -h "$adr" ]; do
    adr=$(readlink "$adr")
#    echo "adr=$adr">>trace
done
caja "$(dirname "$adr")"
... ou, sur suggestion de MicP ci-dessous, pour un fonctionnement unifié :
xdg-open "$(dirname "$adr")"

Si on préfère spécifier le gestionnaire propre au système, il suffit de remplacer "caja" par "nautilus" si on n'utilise pas Ubuntu-Mate...
big_smile

Dernière modification par erresse (Le 08/08/2021, à 16:15)


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

#9 Le 08/08/2021, à 14:24

MicP

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Bonjour

… Il suffit de remplacer "caja" par "nautilus" si on n'utilise pas Ubuntu-Mate...

Peut-être remplacer "caja" ou "nautilus" par xdg-open

Hors ligne

#10 Le 08/08/2021, à 16:11

erresse

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

MicP a écrit :

Bonjour

… Il suffit de remplacer "caja" par "nautilus" si on n'utilise pas Ubuntu-Mate...

Peut-être remplacer "caja" ou "nautilus" par xdg-open

Hé bien OUI, excellente idée, de cette manière le script peut fonctionner sans modification sous plusieurs saveurs de la distribution...
Merci MicP. big_smile


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

#11 Le 08/08/2021, à 17:27

MicP

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Et il a aussi l'option sympa canonicalize de la commande readlink
qui permet de suivre les liens vers les liens vers les liens vers les liens (etc.) pour ne retourner que le dernier.
(L'option courte équivalente est f, mais dans un script, autant utiliser l'option longue)

Donc :

  adr=$(readlink --canonicalize "$adr")

Hors ligne

#12 Le 08/08/2021, à 18:40

erresse

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Alors du coup, pourquoi pas :

xdg-open "$(dirname $(readlink --canonicalize "$1"))"

Et le répertoire parent s'ouvre directement...
Ça simplifie bougrement le codage !
lol lol lol


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

#13 Le 09/08/2021, à 13:06

JME44

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Merci à tous mais j'ai un dernier problème pour l'intégration à Nautilus (ou autre)

J'ai écrit

IFS=$'\n'
lien=${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS[0]}
if [ ! -L $lien ]
then 
	zenity --error --text "$lien\nn'est pas un lien" --width "200"
else

zenity --info --text "-$lien-" --width "900"

xdg-open "$(dirname $(readlink --canonicalize "$lien"))"

fi

car j'ai l'impression que la variable NAUTILUS_SCRIPT_SELECTED_FILE_PATHS est un tableau.

J'ai essayé sans [0]
J'ai essayé avec ${lien/\n/}

Mais le zenity --error ne s'affiche pas : donc $lien est bien un lien
Le deuxième zenity met le - sur une deuxième ligne : donc un \n termine le nom de fichier !

et toujours le readlink rend une chaine vide !

PS question annexe : quelle est la différence entre [ -h $f ] et [ -L $f ] ?

Dernière modification par JME44 (Le 09/08/2021, à 14:03)


Ubuntu 22.04 sur AMD Ryzen 7 2700x et autres sous diverses versions d'Ubuntu, y compris sur Raspberry.

Hors ligne

#14 Le 09/08/2021, à 18:07

erresse

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

J'ai commencé mes essais avec la variable "NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" (chez moi, c'est "CAJA_SCRIPT_SELECTED_FILE_PATHS" mais c'est pareil) et je n'ai jamais pu faire fonctionner le script, il ne reconnaissait jamais vraiment le lien, j'ai dû me rabattre sur le paramètre "$1" qui contient le nom de l'objet sélectionné et là, ça marche au poil !!!
Va comprendre...
En tout cas, tu ne risque rien à essayer de remplacer cette variable par "$1", tu verras par toi-même.


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

#15 Le 10/08/2021, à 09:46

JME44

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Merci à tous.
Voici la solution.

  • Installer les scripts pour Nautilus (ou autre). Tout est expliqué ici

  • Installer le script ci-dessous dans ~/.gnome2/nautilus-scripts/ d'après XXXX
    ou ~/.local/share/nautilus/scripts/ d'après le lien ci-dessus Ne pas oublier de lui donner les droits d'exécution.

Il sera accessible dans Nautilus : [Bouton Droit]/scipts/sonNom

#!/bin/bash 
# Save this to "~/.gnome2/nautilus-scripts/Browse Container" 
# set Properties Permissions Executable 
# while in Nautilus : right-click-object/Scripts/Browse Container 

IFS=$'\n'
for lien in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
	if [ ! -L $lien ]
	then 
		zenity --error --text "$lien\nn'est pas un lien" --width "200"
		continue
	else
		xdg-open "$(dirname $(readlink --canonicalize "$lien"))"

	fi
done

Dernière modification par JME44 (Le 10/08/2021, à 09:48)


Ubuntu 22.04 sur AMD Ryzen 7 2700x et autres sous diverses versions d'Ubuntu, y compris sur Raspberry.

Hors ligne

#16 Le 10/08/2021, à 11:31

MicP

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Dans son message #13, JME44 a écrit :


PS question annexe : quelle est la différence entre [ -h $f ] et [ -L $f ] ?

Extrait du retour de 'man test' a écrit :
…
 -h FICHIER
        FICHIER existe, c'est un lien symbolique (identique à -L)
…
 -L FICHIER
        FICHIER existe, c'est un lien symbolique (identique à -h)
…

Dernière modification par MicP (Le 10/08/2021, à 11:31)

Hors ligne

#17 Le 10/08/2021, à 14:38

Tawal

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Je crois bien que l'option -L correspond à la norme POSIX.


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

#18 Le 10/08/2021, à 15:51

MicP

Re : [Résolu] Nautilus ouvrir dossier contenant un fichier cible d'un lien

Extrait de la page  https://pubs.opengroup.org/onlinepubs/9 … tag_20_128

The Open Group Base Specifications Issue 7, 2018 edition
IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008)
Copyright © 2001-2018 IEEE and The Open Group

…
-h  pathname
     True if pathname resolves to an existing directory entry for a symbolic link.
     False if pathname cannot be resolved, or if pathname resolves to an existing directory entry for a file that is not a symbolic link.
     If the final component of pathname is a symbolic link, that symbolic link is not followed.
-L  pathname
     True if pathname resolves to an existing directory entry for a symbolic link.
     False if pathname cannot be resolved, or if pathname resolves to an existing directory entry for a file that is not a symbolic link.
     If the final component of pathname is a symbolic link, that symbolic link is not followed.
…

Hors ligne