如何使用fdupes删除重复文件?


15

当我运行时,fdupes它会发现30,000多个重复文件。我需要保留一个文件并删除所有其他重复项(因为其中一些是系统文件)。请给我一个命令或脚本来执行此操作,而不必为每组重复文件按“ 1或2或全部”。

Answers:


23

如果您想以静默方式运行此程序,则可以执行此操作(我刚刚使用它清除了在机架空间块存储上运行的150 GB重复数据..£kerching !!)

fdupes -rdN dir/

r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)

没有选项可以移至垃圾桶而不是删除重复项吗?
Augustin Riedinger

2
做到了for f in $(fdupes -f .); do gvfs-trash $f; done
奥古斯丁·里丁格

2
@AugustinRiedinger:fdupes -f . | xargs -rd '\n' -- gvfs-trash如果文件名中包含空格,特殊字符或许多文件,则更好。
David Foerster

@DavidFoerster,您仍然可能使用带有换行符的文件名,这将破坏您的命令。
Ruslan

@Ruslan:没错,但是目前fdupes没有为以空值结尾的记录提供选项,因此没有更好的选择。绝对比以前好得多for f in $(fdupes ...)。:-]
David Foerster

9

fdupes 具有丰富的CLI:

fdupes -r ./stuff > dupes.txt

然后,删除重复项就像检查dupes.txt并删除有问题的目录一样容易。fdupes也可以提示您删除重复项。

fdupes -r /home/user > /home/user/duplicate.txt

命令的输出进入duplicate.txt

fdupes 将比较文件的大小和MD5哈希值以查找重复项。

检查手册fdupes以获得详细的使用信息。


我找到了一个方法。是1 | fdupes -rd / mnt / hda5 / midi_files
user84055


2

我会使用这种更安全的方法:

创建一个脚本并将重复的文件移动到新文件夹。如果您移至原始文件夹之外的文件夹,则fdupes不会在第二次扫描时报告重复的文件,因此删除它们会更安全。

#!/bin/bash

# Save default separator definitions
oIFS=$IFS
# define new line as a separator, filenames can have spaces
IFS=$'\n';

# For each file (f) listed as duplicated by fdupes, recursively
  for f in `fdupes -r -f .`
  do
    # Log the files I'm moving
    echo "Moving $f to folder Duplicates" >> ~/log.txt
    # Move the duplicated file, keeping the original in the original folder
    mv $f Duplicates/
  done

# restore default separator definitions
IFS=$oIFS

1

我已经使用fslintDupeGuru了一段时间。

  • FSlint支持通过通配符和其他清除方法进行选择
  • DupeGuru支持正则表达式

两者都可以处理> 10000个文件/文件夹

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.