6 个版本

使用旧的 Rust 2015

0.3.0 2022年8月8日
0.2.3 2020年8月17日
0.2.1 2020年4月17日
0.1.0 2017年5月17日

#1465 in 文件系统

每月 27 次下载

MIT 许可证

11KB
282

dupdup

Suite of python 2.7 programs to solve the following problems

  • 大量的各种类型的文件,散布在文件系统中
  • 其中许多是重复的
  • 多个目录中有很多音乐或照片,其中大部分是重复的,但也有一些是唯一副本
  • 磁盘(s)在一个速度不快的远程机器上,与本地机器的链接也不是很快(即,在具有磁盘的机器上本地运行脚本比远程挂载磁盘并通过网络运行分析要快)
  • 文件名不是去重的好指标(例如,Lightroom自动重命名文件或自动音乐标签器)。

当你购买NAS进行备份,然后像动物一样备份多台机器而没有决定合理的归档策略时,这种情况就会发生,因此你有所有事物的多个副本,但你有一些文件是每台机器独有的。

dupdup.py

该程序对指定目录下的所有文件进行哈希处理,并查找重复文件。使用 -o file.json,它将报告以JSON格式写入,以供进一步分析。

它是多遍处理的,因为磁盘速度慢:第一遍是对每个文件的第一个4k进行哈希处理,第二遍是完全哈希“可能是重复的”文件,以确保它们确实是重复的。

dupdup.py ../some_directory some/directory -o output_file.json

它还有一个稍微过时的版本在 dupdup-rs 中。

JSON格式

{
  hash1 : ["duplicated file 1a",
           "duplicated file 1b",
           ...],
  hash2 : ["duplicated file 2a",
          "duplicated file 2b",
          ...]
}

merge.py

给定源目录A和目标目录B,尝试找到A中不在B中的所有文件,跳过同时在A和B中的文件。

这生成一个包含许多 mvmkdir -p 命令的shell脚本,需要进行检查,然后运行。

同样,这也不是基于文件名,而是基于其内容。

merge.py -i source_directory -o destination_directory -f merge_script.sh

dupdup.html

一个可以直接打开而不需要服务器的网页,有助于删除重复文件。

它接受由 dupdup.py 生成的JSON文件,并在每行显示每个重复元组。

然后可以点击文件以在所有副本中保持选择,也可以按住Shift键点击以选择一列:点击一个项目,按住Shift键,再点击另一个项目以选择一个范围。

选择了一定数量的文件后,点击导出脚本按钮将生成一个shell脚本,用于检查并然后复制到远程机器,删除所有未被选择

  • 的文件
  • 有被选择的重复文件

即,它不会触及那些行上没有任何选择元素文件的文件。

依赖关系

~3–11MB
~101K SLoC