#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 24.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 le problème solutionné, 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
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 le problème solutionné, 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 24.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...
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 le problème solutionné, 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
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.
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 le problème solutionné, 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 !
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 le problème solutionné, 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 24.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 le problème solutionné, 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 24.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
…
PS question annexe : quelle est la différence entre [ -h $f ] et [ -L $f ] ?
… -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