rclone dedupe
交互式查找重复的文件名并删除/重命名它们。
概要
默认情况下,dedupe
会交互式地查找具有重复名称的文件,并提供删除除一个之外的所有文件或重命名它们以使其不同的选项。这被称为按名称去重。
按名称去重仅对一小部分允许有重复文件名的后端(例如 Google Drive、Opendrive)有用。如果包装后端(例如 crypt)包装了一个支持重复文件名的后端,那么也可以在这些包装后端上运行该操作。
但是,如果传入 --by-hash
参数,dedupe
会改为查找具有重复哈希值的文件,这适用于任何支持至少一种哈希算法的后端。这可用于查找内容重复的文件。这被称为按哈希去重。
如果是按名称去重,首先 rclone 会合并具有相同名称的目录。它会迭代执行此操作,直到所有同名目录都被合并。
接下来,如果是按名称去重,对于每组重复的文件名/哈希值,它会在未经确认的情况下删除找到的除一个之外的所有相同文件。这意味着对于大多数重复文件,dedupe
命令不会是交互式的。
dedupe
认为如果文件具有相同的文件路径和相同的哈希值,则它们是相同的。如果后端不支持哈希值(例如 crypt 包装 Google Drive),那么永远不会发现它们是相同的。如果你使用 --size-only
标志,那么如果文件大小相同(将忽略任何哈希值),则会认为它们是相同的。这在不支持哈希值的 crypt 后端上可能很有用。
接下来,rclone 将解决剩余的重复项。具体采取什么操作取决于去重模式。默认情况下,rclone 会针对每个重复项与用户进行交互式询问。
重要提示:由于此操作可能导致数据丢失,请先使用 --dry-run
或 --interactive
/-i
标志进行测试。
以下是一个运行示例。
去重前 - 存在重复文件
$ rclone lsl drive:dupes
6048320 2016-03-05 16:23:16.798000000 one.txt
6048320 2016-03-05 16:23:11.775000000 one.txt
564374 2016-03-05 16:23:06.731000000 one.txt
6048320 2016-03-05 16:18:26.092000000 one.txt
6048320 2016-03-05 16:22:46.185000000 two.txt
1744073 2016-03-05 16:22:38.104000000 two.txt
564374 2016-03-05 16:22:52.118000000 two.txt
现在是 "dedupe "会话
$ rclone dedupe drive:dupes
2016/03/05 16:24:37 Google drive root 'dupes': Looking for duplicates using interactive mode.
one.txt: Found 4 files with duplicate names
one.txt: Deleting 2/3 identical duplicates (MD5 "1eedaa9fe86fd4b8632e2ac549403b36")
one.txt: 2 duplicates remain
1: 6048320 bytes, 2016-03-05 16:23:16.798000000, MD5 1eedaa9fe86fd4b8632e2ac549403b36
2: 564374 bytes, 2016-03-05 16:23:06.731000000, MD5 7594e7dc9fc28f727c42ee3e0749de81
s) Skip and do nothing
k) Keep just one (choose which in next step)
r) Rename all to be different (by changing file.jpg to file-1.jpg)
s/k/r> k
Enter the number of the file to keep> 1
one.txt: Deleted 1 extra copies
two.txt: Found 3 files with duplicate names
two.txt: 3 duplicates remain
1: 564374 bytes, 2016-03-05 16:22:52.118000000, MD5 7594e7dc9fc28f727c42ee3e0749de81
2: 6048320 bytes, 2016-03-05 16:22:46.185000000, MD5 1eedaa9fe86fd4b8632e2ac549403b36
3: 1744073 bytes, 2016-03-05 16:22:38.104000000, MD5 851957f7fb6f0bc4ce76be966d336802
s) Skip and do nothing
k) Keep just one (choose which in next step)
r) Rename all to be different (by changing file.jpg to file-1.jpg)
s/k/r> r
two-1.txt: renamed from: two.txt
two-2.txt: renamed from: two.txt
two-3.txt: renamed from: two.txt
结果是
$ rclone lsl drive:dupes
6048320 2016-03-05 16:23:16.798000000 one.txt
564374 2016-03-05 16:22:52.118000000 two-1.txt
6048320 2016-03-05 16:22:46.185000000 two-2.txt
1744073 2016-03-05 16:22:38.104000000 two-3.txt
使用"--dedupe-mode "标志或使用具有相同值的额外参数,可以非交互方式运行重复数据清理
* `--dedupe-mode interactive` - 交互式,如上。
* `--dedupe-mode skip` - 删除相同的文件,然后跳过剩下的文件。
* `--dedupe-mode first` - 删除相同文件,然后保留第一个。
* `--dedupe-mode newest` - 删除相同的文件,然后保留最新的文件。
* `--dedupe-mode oldest` - 删除相同的文件,然后保留最旧的文件。
* `--dedupe-mode largest` - 删除相同的文件,然后保留最大的文件。
* `--dedupe-mode smallest` - 删除相同的文件,然后保留最小的文件。
* `--dedupe-mode rename` - 删除相同的文件,然后重命名其他文件。
* `--dedupe-mode list` - 仅列出重复的目录和文件,不做任何更改。
例如,要重命名 Google Photos 目录中所有名称相同的照片,请执行以下操作
rclone dedupe --dedupe-mode rename "drive:Google Photos"
或者
rclone dedupe rename "drive:Google Photos"
rclone dedupe [mode] remote:path [flags]
## Options
--by-hash Find identical hashes rather than names
--dedupe-mode string Dedupe mode interactive|skip|first|newest|oldest|largest|smallest|rename (default "interactive")
-h, –help help for dedupe
接下来将介绍与其他命令共享的选项。
此处未列出的全局选项,请参阅 [global flags page](/flags/)。
### 重要选项
对大多数命令有用的重要标志
-n, –dry-run Do a trial run with no permanent changes -i, –interactive Enable interactive mode -v, –verbose count Print lots more stuff (repeat for more)
## 参见
* [rclone](/commands/rclone/) - 显示 rclone 命令、标志和后端帮助。