#duplicate #directory #finder #cleaner #command-line-tool #cli

bin+lib duplicate_destroyer

查找并销毁重复目录

8 个版本

0.0.8 2023年12月13日
0.0.7 2023年11月22日
0.0.4 2023年6月15日
0.0.3 2023年4月23日
0.0.1 2023年2月28日

#243 in 文件系统

50 每月下载次数

AGPL-3.0-or-later

105KB
1.5K SLoC

重复销毁者

命令行工具,用于查找重复目录并提供基本处理。

Tests crates.io docs.rs

简介

你是否曾经备份过备份文件夹的备份文件夹?然后你尝试使用传统的去重工具来整理混乱的文件夹,结果发现你不得不手动检查20 431个文件?那么 DuDe 就是你需要的!DuDe 可以找到文件系统中最顶层的重复文件夹,并允许你一次性轻松地消除所有重复文件(或者至少直到下一次备份...)。

(这也是一个旨在作为 Rust 学习经验的小项目。)

安装

从源代码安装

在 Linux 上,使用 Rust 1.64 或更高版本,通过运行以下命令进行安装:

cargo install --features cli duplicate_destroyer

安装完成后,将会有 dude 二进制文件可用。

我已在 Fedora 35+ 和 Raspberry Pi OS Bullseye 上测试了安装。

在 Ubuntu 22.04 LTS 上

可能缺少构建依赖项 - cc。首先运行以下命令安装 DuDe:

apt install build-essential

然后从源代码构建

cargo install --features cli duplicate_destroyer

基本用法

警告:该包仍然相对较新,API 可能会有一些重大更改。

扫描目录以查找重复项

dude --path path/to/some/dir --path path/to/another/dir

一旦扫描目录,DuDe 将打印找到的重复组。例如:

Group 1/2
--------------------------------
0. "path/to/some/dir/some_dir/A"
1. "path/to/some/dir/other_dir/B"
--------------------------------
Size: 8kB
-----------
Select action and paths. (Or press Ctrl-C to exit program.)
[O]pen, Open [F]older, [D]elete, ReplaceWith[H]ardlink, ReplaceWith[S]oftlink, [N]othing

要对找到的项采取行动,请输入操作字母和文件编号。例如:

O 0 1

将打开两个文件。

D 0

将(在确认后)删除我们示例中的 "path/to/dir/some_dir/A"。

并行处理

使用 --jobs 标志配置用于计算校验和的线程数

dude --path path/to/some/dir --jobs 3

当使用 DuDe 与现代 CPU 和外置 HDD 时,通常最好只使用一个线程(默认情况下就是这样),因为程序当时成为 I/O 绑定,从 HDD 读取多个文件的并行访问可能会降低读取速度。

最小大小

可以通过--minimum-size参数指定返回重复项的最小大小。但请注意,这并不会显著减少计算时间,因为DuDe仍然会获取所有可能存在重复项的文件的校验和。这样做的原因是,即使是大型的目录也可能在某些小文件上有所不同,如果我们完全忽略小文件,我们可能会丢失一些虽小但很重要的数据。

哈希算法

杜德可以使用这些哈希算法来比较文件

  • blake2 [默认]
  • sha3-256
  • sha3-512 如果DuDe在内存受限的系统上运行,建议切换到sha3-256算法
dude --path path/to/some/dir --algorithm "sha2-512"

CLI选项

Usage: dude [OPTIONS] --path <PATH>

Options:
  -p, --path <PATH>                  Add path to be scanned
  -m, --minimum-size <MINIMUM_SIZE>  Minimum size of duplicates considered (can have a metric prefix) [default=100]
  -j, --jobs <JOBS>                  Number of jobs that run simultaneously [default=0]
      --json-file <FILE>             Output the list of duplicates to a file in json format
      --no-interactive               Disable interactive duplicate handling
  -a, --algorithm <ALGORITHM>        Hash algorithm used to compare files [possible values: blake2, sha3-256, sha3-512]
  -h, --help                         Print help
  -V, --version                      Print version

如果您不喜欢用户界面,您可以自己编写!DuDe提供了一个具有核心功能的库。请参阅[此处](https://docs.rs/duplicate_destroyer/latest/duplicate_destroyer/)的文档。

依赖项

~4–15MB
~165K SLoC