Откройте родительскую папку символической ссылки с помощью щелчка правой кнопкой мыши?

Мы можем открыть родительскую папку любого файла, используя скрипт nautilus, например

#!/bin/bash 

nautilus "$1"

Если я сделаю этот скрипт по символической ссылке, которая находится на ~/Desktop, то он откроет сам рабочий стол.

Как я могу перекодировать этот скрипт, чтобы открыть родительскую ссылку фактического файла, с которой связана символическая ссылка? Например, если у меня есть файл с символьной ссылкой Desktop/my-doc.doc ссылка на файл документа, расположенный в /media/myharddisk/my-doc.doc, скрипт откроет / media / myharddisk / и НЕ ~/Desktop в Nautilus.

3 ответа

Решение

Попробуй это:

#!/bin/bash

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

Сохранить этот скрипт как Open symlink's parent dir в вашем ~/.gnome2/nautilus-scripts/, При щелчке правой кнопкой мыши у вас будет опция в разделе "скрипты", "Открыть каталог родительской ссылки".

Вы можете открыть родительский каталог любой символической ссылки из него. Символическая ссылка может иметь любой файл или папку. Если это не символическая ссылка, вы получите уведомление.

#!/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"

введите описание изображения здесь

введите описание изображения здесь

Если существует более одной мягкой ссылки

Ты можешь использовать readmultilink из этого ответа Раду Рэдяну. Тогда скрипт сможет добраться до родительского каталога, переходя по нескольким программным ссылкам одновременно.

Вам нужно скопировать вставить функцию в свой код и использовать readmultilink вместо readlink,

В конце "NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" добавлен дополнительный перевод строки, который вызывает проблемы, когда я пытаюсь добавить двойные кавычки для правильного определения файла.

Я изменил хорошее предложение от souravc, так что оно отлично работает для меня (перевод строки в конце удален, добавлены двойные кавычки, чтобы не возникало проблем с именами файлов с пробелами).

#!/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" )"
Другие вопросы по тегам