![通过右键单击打开符号链接的父文件夹?](https://linux22.com/image/848087/%E9%80%9A%E8%BF%87%E5%8F%B3%E9%94%AE%E5%8D%95%E5%87%BB%E6%89%93%E5%BC%80%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E7%9A%84%E7%88%B6%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
我们可以使用 nautilus 脚本打开任何文件的父文件夹,例如
#!/bin/bash
nautilus "$1"
如果我在 ~/Desktop 上的符号链接上执行此脚本,那么它将打开桌面本身。
我该如何重新编码此脚本以打开符号链接绑定的实际文件的父文件?例如,如果我有一个链接Desktop/my-doc.doc
到位于的 doc 文件的符号链接文件/media/myharddisk/my-doc.doc
,则脚本将打开/媒体/我的硬盘/和 不是 ~/Desktop在鹦鹉螺中。
答案1
尝试这个:
#!/bin/bash
file="$(readlink -f "$1")"
nautilus "${file%/*}"
答案2
将此脚本另存为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
此Radu Rădeanu 的回答. 然后脚本将能够通过多个软链接一次导航到父目录。
您需要在代码中复制粘贴该函数并readmultilink
使用readlink
。
答案3
“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" )"