Jos*_*osh 173 hard-link files deduplication duplicate-files
我正在寻找一种简单的方法(一个命令或一系列命令,可能涉及find)在两个目录中查找重复文件,并将一个目录中的文件替换为另一个目录中文件的硬链接。
情况是这样的:这是一个文件服务器,多人在上面存储音频文件,每个用户都有自己的文件夹。有时,多人拥有完全相同的音频文件的副本。现在,这些都是重复的。我想让它们成为硬链接,以节省硬盘空间。
d-b*_*d-b 136
rdfind完全按照您的要求执行(并按照约翰尼为什么列出的顺序)。可以删除重复项,用软链接或硬链接替换它们。结合symlinks您还可以使符号链接成为绝对的或相对的。您甚至可以选择校验和算法(md5 或 sha1)。
由于它是编译的,所以它比大多数脚本解决方案更快:time从 2009 年开始,在我的 Mac Mini 上有 2600 个文件的 15 GiB 文件夹上返回这个
9.99s user 3.61s system 66% cpu 20.543 total
Run Code Online (Sandbox Code Playgroud)
(使用 md5)。
在大多数包处理程序中可用(例如 Mac OS X 的 MacPorts)。
tan*_*nte 52
使用fdupes工具:
fdupes -r /path/to/folder为您提供目录中的重复项列表(-r 使其递归)。输出如下所示:
文件
名1文件名2  
文件
名3
文件名4文件名5
文件名 1 和文件名 2 相同,文件名 3、文件名 4 和文件名 5 也相同。
fsc*_*itt 42
http://cpansearch.perl.org/src/ANDK/Perl-Repository-APC-2.002/eg/trimtrees.pl有一个 perl 脚本,它完全符合您的要求:
遍历命令行中命名的所有目录,计算 MD5 校验和并找到具有相同 MD5 的文件。如果它们相等,如果它们真的相等,则进行真正的比较,将两个文件中的第二个替换为第一个文件的硬链接。
wal*_*tor 28
我使用hardlink来自http://jak-linux.org/projects/hardlink/
小智 18
这是由“fslint”所提供的功能之一- http://en.flossmanuals.net/FSlint/Introduction
单击“合并”按钮:
Wei*_*Yin 16
由于您的主要目标是节省磁盘空间,因此还有另一种解决方案:文件系统级别的重复数据删除(可能还有压缩)。与硬链接方案相比,不存在不慎影响其他链接文件的问题。
ZFS 从池版本 23 开始就进行了重复数据删除(块级,而不是文件级),并且很久以前就进行了压缩。如果您使用的是 linux,您可以尝试zfs-fuse,或者如果您使用 BSD,它是本机支持的。
小智 8
如今在现代 Linux 上,有https://github.com/g2p/bedup可以在 btrfs 文件系统上进行重复数据删除,但是 1) 没有那么多的扫描开销,2) 之后文件很容易再次发生分歧。
apt show hardlink
Run Code Online (Sandbox Code Playgroud)
Description: Hardlinks multiple copies of the same file Hardlink is a tool which detects multiple copies of the same file and replaces them with hardlinks.
I also used jdupes recently with success.
要查找重复文件,您可以使用duff。
Duff 是一个 Unix 命令行实用程序,用于快速查找给定文件集中的重复项。
只需运行:
duff -r target-folder
Run Code Online (Sandbox Code Playgroud)
要自动创建到这些文件的硬链接,您需要使用bash或其他一些脚本语言解析duff的输出。
jdupes 已在评论中提到但值得自己回答,因为它可能在大多数发行版中可用并且运行速度非常快(它在大约一分钟内释放了 2.7?GB 的 98?%完整的 158?GB 分区(SSD 驱动器)) :
jdupes -rL /foo/bar
Run Code Online (Sandbox Code Playgroud)
        在我看来,首先检查文件名可以加快速度。如果两个文件缺少相同的文件名,那么在很多情况下我不会认为它们是重复的。似乎最快的方法是按顺序进行比较:
有什么方法可以做到这一点吗?看看duff,,,,等等。fdupesrmlintfslint
以下方法在commandlinefu.com上投票最多:查找重复文件(首先基于大小,然后是 MD5 哈希值)
是否可以将文件名比较添加为第一步,将大小比较添加为第二步?
find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | \
  xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | \
  sort | uniq -w32 --all-repeated=separate
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           59528 次  |  
        
|   最近记录:  |