Nautilus - 不支持硬链接?

Nautilus - 不支持硬链接?

我终于有时间了研究和理解硬链接为了检查自己是否理解了基础知识,我跳过了很多内容。在意识到它们有多出色之后,我很好奇为什么 Ubuntu 的默认文件管理器 nautilus 没有更好地支持它们。

目前,只有一个选项可以创建文件链接,它将创建一个“软”链接。

在此处输入图片描述

问题在于,只要你移动或重命名原始文件,它们就会中断。

问题

有没有办法让 nautilus 创建硬链接,或者我可以通过某种插件/脚本/配置/调整在右键单击菜单或键盘快捷键中添加选项来为文件创建硬链接?

答案1

显然这个选项是几年前故意删减的。从主题创建硬链接来自bugzilla.gnome.org:

我们的用户中几乎没有人知道硬链接的概念,那么我们为什么要让他感到困惑,甚至冒着数据丢失的风险呢?您可以使用 nautilus-open-terminal 并手动创建硬链接。


好消息是您有两种选择来创建此功能:

  • 通过使用 Nautilus Actions 或
  • 使用 Nautilus 脚本

解决方案 1:使用 Nautilus Actions

1.首先安装包nautilus-actions

sudo apt update
sudo apt install nautilus-actions

或者使用 Ubuntu 软件:

安装 nautilus-actions

2.运行程序:

运行 nautilus-actions

3.转到‘首选项’并取消选中‘创建根 Nautilus 操作菜单’:

nautilus-actions 偏好设置

当勾选此选项时,上下文菜单中会有子菜单等。

4.点击定义新动作按钮并填写数据行动标签为上下文标签您可以使用Make Hard Link,也可以只勾选该选项Display item in selection context menu- 换句话说,在选择文件时显示此项。

定义新动作 - Action

5.命令选项卡并填写参数:

  • 轮廓

  • 标签Default profile——如果没有任何自定义配置文件。

  • 命令

  • 小路/bin/ln——这是可执行文件(或命令)的路径。

  • 参数%f "Hard Link to "%b""——单击“图例”按钮获取更多信息。

  • 工作目录: %d- 表示当前目录。

定义新动作-命令

6.因为目录硬链接以多种方式破坏文件系统我们必须消除这种可能性。转到模仿类型选项卡并添加新规则

  • Mimetype 过滤器inode/directory
  • Must not match any of选择选项。

定义新动作 - Mimetypes

7. 记录那个行动创建硬链接

定义新动作-记录

8.运行 Nautilus 并使用创建硬链接从上下文菜单中执行操作:

在此处输入图片描述


此外,如果您想备份您的设置:

  • 该文件$HOME/.config/nautilus-actions/nautilus-actions.conf包含 Nautilus Actions 首选项。
  • 并且新操作位于文件夹内:$HOME/.local/share/file-manager/actions/

解决方案 2:使用 Nautilus 脚本

可以通过将脚本放入 中来实现相同的结果$HOME/.local/share/nautilus/scripts/。此脚本可能如下所示:

$ cat "$HOME/.local/share/nautilus/scripts/Make Hard Link"

#!/bin/bash
if [[ -f "$1" ]]
then
        ln "$1" "Hard Link to $1"
fi

我们可以通过以下命令创建该脚本并赋予其可执行权限:

ScriptNAME="$HOME/.local/share/nautilus/scripts/Make Hard Link" && \
printf '#!/bin/bash\nif [[ -f \"$1\" ]]\nthen\n\tln \"$1\" \"Hard Link to $1\"\nfi\n' |\
tee "$ScriptNAME" && chmod +x "$ScriptNAME"

其结果将是:

在此处输入图片描述

参考:

答案2

受到这里的答案的启发,我编写了一个 Nautilus/Nemo 脚本,可以通过选择多个文件来创建硬链接。

#!/bin/bash
# make hard links for multiple file selection
# be careful of not moving the hard link to a different file system
HARDLINK_ICON=${HOME}/.local/share/icons/mine/folder-green-activities-icon.png
for arg 
do
    # make a hard link of the selected file
    if [[ -f "$arg" ]] 
    then
        HARDLINK_NAME="Hard Link to $arg"
        ln "$arg" "${HARDLINK_NAME}"
        gio set -t string "${HARDLINK_NAME}" metadata::custom-icon file:///${HARDLINK_ICON}
    fi
done
  1. 确保将图标添加到本地主文件夹。例如${HOME}/.local/share/icons/mine/folder-green-activities-icon.png
  2. 请注意不要将硬链接移动到其他文件系统;否则将不起作用。如果图标未显示,则很可能是将硬链接剪切并粘贴到了其他文件系统。

相关内容