#filesize #duplicate #filename #finder #dupe #command-line-tool

bin+lib clonehunter

一个简单的命令行工具,用于识别相同文件组并将它们显示到控制台

5个版本 (3个破坏性版本)

0.4.1 2024年6月11日
0.4.0 2024年6月11日
0.3.1 2024年6月3日
0.2.1 2024年4月16日
0.1.0 2024年4月11日

#570 in 文件系统

每月28次下载

MIT/Apache

61KB
1K SLoC

CloneHunter: 一个简单的命令行工具,用于识别相同文件组并将它们显示到控制台。

crate MIT licensed Rust Version Downloads Category

版权所有 (c) 2024 Venkatesh Omkaram

如何使用?

如果您有作为二进制可执行文件的程序,则运行 clonehunter --help 以获取使用说明。如果您通过Cargo运行此程序,则从根目录运行 cargo --help 以获取使用说明。

安装程序永久到您的系统上,请运行 cargo --install

有关安装的详细信息,请参阅Rust官方文档

  • 命令可用
  • hunt

delete

clonehunter hunt your-folder-path -t 12 -c -v -m 50 -e pdf -s both -o asc -u json -f output-report.json --max "20 MiB"

示例用法:的 clonehunter hunt . 以查找当前目录中的重复文件。

注意:以下选项是简化的。有关完整选项列表,请运行 clonehunter --help

-m 代表最大深度。'-m' 后面的数字表示需要查找多少个子级数以找到克隆。默认值为 10。如果您不想指定最大深度,则明确传递选项 --no-max-depth

- 代表详细模式。此选项有助于打印每个文件的哈希值,以便您进行比较并手动确定克隆。

- 代表线程数。选择分配给程序以进行搜索的线程数。在上面的例子中,我使用 12 个线程。如果您不提供此选项,则默认使用的线程数为 8。

- 代表扩展名,此功能允许您针对特定的文件类型(即文件扩展名)。在上面的例子中,我针对 pdf。如果您不想针对任何特定的文件类型,则不要使用此选项。您也可以传递类似 pdf,txt,mp4 的内容。这将针对所有三种文件类型。

- 代表按什么排序,此功能有助于根据 3 种变体对要打印到屏幕上的输出进行排序。这三种变体是 file-typefile-sizeboth。当您将值传递为 both 时,输出将首先根据 file-size 排序,然后是 file-type

- 代表按什么排序,此功能有助于根据 - 选项获得的排序输出进行排序。此选项仅在 ---size 起作用时适用。此外,当您只使用文件类型进行排序时,顺序无关紧要。

- 代表输出样式。有两种变体。第一种是 json,第二种是 default。基本上,这决定了将最终报告写入文件时的输出样式。

- 代表输出文件。正如其名所示,它使用由 - 提供的特定输出样式将最终报告写入文件。

注意:如果您想使用 delete 命令删除找到的克隆,则必须使用 ---name.json 首先生成一个 JSON 报告,然后可以将该报告作为后续输入传递给删除命令。

--min 代表最小文件大小。此选项针对以字节为单位的最小文件大小(不要与 --max 一起使用)(另外,您还可以使用 "KiB"、"MiB"、"GiB"、"KB"、"MB"、"GB"。例如:"13 MiB",带引号)

--max 代表最大文件大小。此选项针对以字节为单位的最大文件大小(不要与 --min 一起使用)(另外,您还可以使用 "KiB"、"MiB"、"GiB"、"KB"、"MB"、"GB"。例如:"13 MiB",带引号)

核心算法是如何工作的?

程序寻找重复文件有两种模式。

  1. 无校验和计算
  2. 带校验和计算(通过传递 -

无校验和计算

这适用于你没有传递-c选项的情况。程序将基于文件大小、文件名和修改时间的组合进行的哈希操作来查找克隆。

  • 如果两个文件名和文件大小相同,但这并不构成克隆,因为文件内容可能不同,或者修改时间可能不同。
  • 如果两个文件的大小和修改时间相同,但这并不构成克隆,因为文件内容可能不同。
  • 如果两个文件名和修改时间相同,但这并不构成克隆,因为文件大小可能不同。
  • 最后,如果两个文件名、文件大小和修改时间都相同,那么这肯定是一个克隆。

现在,可能会出现一个问题,即如果有两个文件具有不同的文件名,但内容完全相同,不考虑修改时间,这是否一定是克隆?是的。这就是为什么有“带校验和计算”-c选项的原因。

带校验和计算

校验和也是一种哈希,但这是在文件内容上而不是在文件元数据(如名称、大小和时间)上进行的。

  • 如果文件大小小于1 MB,则对整个文件数据进行校验和计算。
  • 如果文件大小大于1 MB,则程序将取文件的前1 MB、最后1 MB以及文件大小,然后对它们进行组合并计算哈希。这样,我们就可以确信两个文件是绝对克隆的,而无需对整个文件长度进行校验和计算。

一些注意事项

程序基于最大努力的原则扫描和输出相同文件。这意味着它报告的并非所有文件都可以被认为是“绝对相同”。因此,这里的关键词是“可能相同”。当您想要快速分析哪些文件可能是相同的时候,可以使用此工具。此工具不应在关键位置和商业解决方案中使用,也不应被认为是删除找到的相同文件的真实来源。最多,该工具可能报告错误的相同文件或跳过一些由于文件权限限制而无法访问的文件。请确保首先对不同类型的样本文件进行一些测试运行。

关于0字节大小的文件

如果您正在对一系列不同文件或文件类型(如mp4、pdf、txt等)运行clonehunter,但它们的文件大小都是0字节,并且您使用了-c校验和选项,您将观察到所有0大小的文件在屏幕上的最终输出中都被分组为重复项。

带有选项的delete命令示例使用

clonehunter delete -i ../some.json --dry-run

delete命令没有很多选项。

-i接受您使用hunt命令和选项-u json -f report-name.json生成的输入JSON报告文件。

--dry-run让您在没有真正删除任何内容的情况下测试删除算法

依赖关系

~8-17MB
~210K SLoC