Мы можем открыть родительскую папку любого файла, используя скрипт nautilus, например
#!/bin/bash
nautilus "$1"
Если я сделаю этот скрипт по символической ссылке, которая находится на ~ / Desktop, то он откроет сам рабочий стол.
Как я могу перекодировать этот скрипт, чтобы открыть родительский элемент фактического файла, с которым связана символическая ссылка? Например, если у меня есть файл ссылки sym Desktop/my-doc.doc
, связанный с файлом документа, расположенным в /media/myharddisk/my-doc.doc
, скрипт откроет / media / myharddisk / и NOT ~ / Desktop в Наутилусе.
Попробуйте это:
#!/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" )"