有没有一种简单的方法可以用硬链接替换重复的文件?

有没有一种简单的方法可以用硬链接替换重复的文件?

我正在寻找一种简单的方法(一个命令或一系列命令,可能涉及find)来查找两个目录中的重复文件,并将一个目录中的文件替换为另一个目录中文件的硬链接。

情况是这样的:这是一个文件服务器,多人在其上存储音频文件,每个用户都有自己的文件夹。有时,多个人拥有完全相同的音频文件的副本。现在,这些都是重复的。我想让它们成为硬链接,以节省硬盘空间。

答案1

rdfind完全符合您的要求(并且按顺序约翰尼为什么列表)。可以删除重复项,用软链接或硬链接替换它们。结合symlinks您还可以使符号链接成为绝对或相对。您甚至可以选择校验和算法(sha256、md5 或 sha1)。

由于它是经过编译的,因此比大多数脚本解决方案更快:time在 2009 年的 Mac Mini 上包含 2600 个文件的 15 GiB 文件夹中返回此

9.99s user 3.61s system 66% cpu 20.543 total

(使用 md5)。

在大多数包处理程序中可用(例如 Mac OS X 的 MacPorts)。


编辑:我可以补充一点,rdfind 真的很容易使用/非常有教学意义。只需使用该-dryrun true标志,它就会非常直观,并不可怕(在我看来,删除文件的工具通常都是这样)。

答案2

使用fdupes工具:

fdupes -r /path/to/folder为您提供目录中重复项的列表(-r 使其递归)。输出如下所示:


文件名1
文件名2

文件名3
文件名4
文件名5


文件名 1 和文件名 2 相同,文件名 3、文件名 4 和文件名 5 也相同。

答案3

有一个 perl 脚本位于http://cpansearch.perl.org/src/ANDK/Perl-Repository-APC-2.002/eg/trimtrees.pl这正是你想要的:

遍历命令行中指定的所有目录,计算 MD5 校验和并查找具有相同 MD5 的文件。如果它们相等,则进行真正的比较,如果它们确实相等,则用指向第一个文件的硬链接替换两个文件中的第二个文件。

答案4

这是“fslint”提供的功能之一—— http://en.flossmanuals.net/FSlint/Introduction

单击“合并”按钮:

截屏

相关内容