我有两个文件夹,里面有各种文件。第一个文件夹中的一些文件在第二个文件夹中有完全相同的副本。我想用硬链接替换这些文件。我该怎么做?
答案1
我知道有 4 个 Linux 命令行解决方案。我首选的是这里列出的最后一个,rdfind
因为它有所有可用的选项。
重复项
- 这似乎是最受推荐/最知名的一个。
- 它是最容易使用的,但它唯一的作用是删除重复项。
- 为了确保重复项确实是重复项(同时不会花费很长时间运行),首先按文件大小进行比较,然后进行 md5 哈希比较,然后进行逐字节比较。
示例输出(带有选项“显示大小”、“递归”):
$ fdupes -Sr .
17 bytes each:
./Dir1/Some File
./Dir2/SomeFile
硬链接
- 正如名称所示,设计目的是用硬链接替换找到的文件。
- 有一个
--dry-run
选项。 - 没有表明如何比较内容,但与所有其他选项不同,它考虑了文件模式、所有者和修改时间。
示例输出(请注意我的两个文件的修改时间略有不同,因此在第二次运行中我告诉它忽略这一点):
$ stat Dir*/* | grep Modify
Modify: 2015-09-06 23:51:38.784637949 -0500
Modify: 2015-09-06 23:51:47.488638188 -0500
$ hardlink --dry-run -v .
Mode: dry-run
Files: 5
Linked: 0 files
Compared: 0 files
Saved: 0 bytes
Duration: 0.00 seconds
$ hardlink --dry-run -v -t .
[DryRun] Linking ./Dir2/SomeFile to ./Dir1/Some File (-17 bytes)
Mode: dry-run
Files: 5
Linked: 1 files
Compared: 1 files
Saved: 17 bytes
Duration: 0.00 seconds
达夫
- 用于查找用户随后可对其执行操作的文件;没有可用的操作。
- 比较通过文件大小进行,然后是 sha1 哈希。
- 哈希可以更改为 sha256、sha384 或 sha512。
- 可以禁用哈希以进行逐字节比较
示例输出(带有“递归”选项):
$ duff -r .
2 files in cluster 1 (17 bytes, digest 34e744e5268c613316756c679143890df3675cbb)
./Dir2/SomeFile
./Dir1/Some File
查找
- 选项具有不寻常的语法(旨在模仿
find
?)。 - 对重复文件采取的措施有几种选项(删除、创建符号链接、创建硬链接)。
- 具有试运行模式。
- 比较按文件大小进行,然后是第一个字节,然后是最后一个字节,然后是 md5(默认)或 sha1。
- 对找到的文件进行排序可以预测哪个文件被视为原始文件。
示例输出:
$ rdfind -dryrun true -makehardlinks true .
(DRYRUN MODE) Now scanning ".", found 5 files.
(DRYRUN MODE) Now have 5 files in total.
(DRYRUN MODE) Removed 0 files due to nonunique device and inode.
(DRYRUN MODE) Now removing files with zero size from list...removed 0 files
(DRYRUN MODE) Total size is 13341 bytes or 13 kib
(DRYRUN MODE) Now sorting on size:removed 3 files due to unique sizes from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on md5 checksum:removed 0 files from list.2 files left.
(DRYRUN MODE) It seems like you have 2 files that are not unique
(DRYRUN MODE) Totally, 17 b can be reduced.
(DRYRUN MODE) Now making results file results.txt
(DRYRUN MODE) Now making hard links.
hardlink ./Dir1/Some File to ./Dir2/SomeFile
Making 1 links.
$ cat results.txt
# Automatically generated
# duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1 1 17 2055 24916405 1 ./Dir2/SomeFile
DUPTYPE_WITHIN_SAME_TREE -1 1 17 2055 24916406 1 ./Dir1/Some File
# end of file
答案2
- 一系列新的命令行选项——包括
--linkhard
, 或者-L
简称 - 对所有主要操作系统平台的本机支持
- 据说速度平均比 fdupes 快 7 倍以上
对于你的问题,你可以直接执行$ jdupes -L /path/to/your/files
。
您可能希望从其克隆和构建最新源代码GitHub 仓库因为该项目仍处于积极开发中。
Windows 二进制文件也在这里提供。一些 Linux / BSD 发行版中提供了打包的二进制文件 — 实际上,我是通过 第一次发现它的$ apt search
。
答案3
答案4
我的电脑上有一个名为 Link Shell Extension 的免费工具,它不仅能很好地创建硬链接和符号链接,还能创建连接点!此外,它还添加了自定义图标,让您可以轻松识别不同类型的链接,甚至是安装前已经存在的链接;例如,红色箭头代表硬链接,绿色代表符号链接……而链条代表连接点。
不幸的是,我之前卸载了该软件(在批量卸载各种程序时),所以我无法手动创建任何链接,但是每当 Windows 检测到硬链接、符号链接或连接链接时,图标仍然会自动显示。