rclone dedupe

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 命令、标志和后端帮助。