有什么方法可以在查找器中创建硬链接吗?


8

有什么方法可以在查找器中创建硬链接吗?

终端中的硬链接将使用以下命令创建:

ln /path/to/file /path/to/newpath

而符号链接/别名可以通过按住Command和Option或

ln -s /path/to/file /path/to/newpath

(尽管“ alias”和“ ln”的行为显然不同

Answers:


7

您可以这样创建Automator服务:

在此处输入图片说明

这将获取所选文件,并在它们存在的目录中创建指向它们的硬链接。然后,您可以将链接拖放到所需的位置。

这将适用于名称中带有空格的文件,但不适用于名称中带有引号的文件。

您可以从Finder » 服务菜单,上下文菜单中访问它,并且可以为其分配键盘快捷方式,类似于 L别名的快捷方式(可能是L)。


1
有一种方法可以使动作从一个文件夹拖放到另一个文件夹时,同时按住提供目标文件夹的选项键之类的东西,以便可以直接在新目录中直接创建硬链接?
2014年

@Michael可能最好将其本身作为一个问题,而不是对此答案进行评论。
丹尼尔

1
应该处理名称中带有引号的文件的bash角度来看。没有与Automator相关的原因吗?(您是否测试了它实际上不带引号的功能?)
通配符

相关文章,来自Unix&Linux Stack Exchange:如何在for循环中使用$ 1 $ 2…之类的参数?(可以使用多种更简单的语法。)
通配符

@Daniel:我用精致的代码扩展了您的解决方案,以便获得“我的文件Hardlink.txt”,而不是“我的File.txt Hardlink”,这会妨碍文件类型关联。请同行审查。谢谢。
porg

2

Finder.app本身无法执行此操作。但是,如果您的目标只是避免在Terminal.app中键入命令,则可以使用Automator.app创建工作流来为您执行命令。


2

我实际上想要保留扩展名的重命名中的链接术语,否则finder不能识别文件类型。

所以我用了丹尼尔的答案(谢谢),并做了一些修改

for f in "$@"
 do  
  dir=$(dirname "$f")
  filename=$(basename "$f")
  extension=$([[ "$filename" = *.* ]] && echo ".${filename##*.}" || echo '')
  filename="${filename%.*}"
  ln "$f" "${dir}/$filename Hardlink$extension"
done

编辑:添加了我认为更好的扩展处理代码-如果没有扩展名,则应为空白。抱歉,我不擅长编写脚本,因此请分享您认为需要的所有修补程序。


非常好。请注意:如果您的文件没有任何扩展名,您将得到一些非常令人惊讶的结果!(而且,如果其中一个目录的名称中带有句点,则意外情况将以其他形式出现。)
通配符

1

是的,间接地。

Automator使您可以提供运行任何Shell脚本的服务,还可以要求您提供硬链接目标的路径(因为它可能与原始位置不在同一位置)。我想您也可以默认链接位置,例如桌面。

只需添加一个步骤,弹出一个对话框即可输入,否则选择目标并将其传递给您的ln命令。


1

丹尼尔(Daniel)提供的不错的解决方案,但我建议将其脚本代码替换为下面的代码,以保留文件类型。

for f in "$@"
do  
  ln "$f" "Plink-$(basename "$f")"
done

“对文件类型无破坏性”是什么意思?
user151019 2014年

我遵循了Finder的“制作别名”命令所使用的模式。当然,您可以根据自己的喜好更改命名约定。
丹尼尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.