web-dev-qa-db-fra.com

Ouvrez le dossier parent d'un lien symbolique via un clic droit?

Nous pouvons ouvrir un dossier parent de n'importe quel fichier en utilisant un script nautilus comme

#!/bin/bash 

nautilus "$1"

Si je fais ce script sur un lien symbolique qui se trouve sur le ~/bureau, il ouvrira le bureau lui-même.

Comment puis-je recoder ce script pour ouvrir le parent du lien symbolique du fichier réel est lié à? Par exemple, si j'ai un fichier de lien sym Desktop/my-doc.doc lien vers le fichier doc situé dans /media/myharddisk/my-doc.doc, le script s'ouvrira / media/myharddisk / et NOT ~/Desktop dans Nautilus.

2
ubuntico

Essaye ça:

#!/bin/bash

file="$(readlink -f "$1")"
nautilus "${file%/*}"
1
kiri

Enregistrez ce script sous Open symlink's parent dir dans ton ~/.gnome2/nautilus-scripts/. Sur clic droit, vous aurez une option sous "scripts", "Ouvrir le répertoire parent du lien symbolique".

vous pouvez ouvrir le répertoire parent de tout lien symbolique à partir de celui-ci. le lien symbolique peut être de n'importe quel fichier ou dossier. S'il ne s'agit pas d'un lien symbolique, vous recevrez un avis.

#!/bin/bash

if [ -h $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ]; then
    var="$(readlink $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)"
else
    zenity --info --text="$(basename "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS") is not a symbolic link"
    exit 0
fi
if [ -d "$var" ]; then
    var2="$var"
else
    var2="$(dirname "$var")"
fi
nautilus "$var2"

enter image description here

enter image description here

S'il y a plus d'un lien logiciel

Vous pouvez utiliser readmultilink à partir de cela réponse de Radu Rădean . Ensuite, le script sera en mesure d'atteindre le répertoire parent en naviguant à travers plusieurs liens logiciels à la fois.

Vous devez copier coller la fonction dans votre code et utiliser readmultilink au lieu de readlink.

2
souravc

Il y a un saut de ligne supplémentaire à la fin de "NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" qui cause des problèmes lorsque j'essaie d'ajouter des guillemets doubles pour la détection de fichier correcte.

J'ai changé la suggestion de Nice de souravc pour que cela fonctionne parfaitement pour moi (le saut de ligne à la fin a été supprimé, les guillemets ont été ajoutés afin qu'il n'y ait aucun problème avec les noms de fichiers avec des espaces).

#!/bin/bash

# Remove line feed at the end of the path
selectedPath="${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS%?}"

# Check if the selected file is a symbolic link
if [ -h "$selectedPath" ]; then
    var="$( readlink "$selectedPath" )"
else
    zenity --info --text="$( basename "$selectedPath" ) is not a symbolic link"
    exit 0
fi

# Open the parent directory of the symbolic link 
nautilus "$( dirname "$var" )"
1
TuKsn