如何查找(和删除)重复文件


125

我的音乐收藏比较大,里面有些重复。有什么办法可以找到重复的文件。至少要进行散列并查看两个文件是否具有相同的散列。

除了扩展名之外,还可以找到具有相同名称的文件,这点值得一提-我想我有些歌曲同时具有mp3和ogg格式。

如果这是最简单的方法,我很乐意使用命令行。

Answers:


138

我用fdupes这个。它是一个命令行程序,可以使用从库中安装sudo apt install fdupes。您可以像这样称呼它fdupes -r /dir/ect/ory,它会打印出一个骗子列表。fdupes还有一个简单的主页Wikipedia文章,其中列出了更多程序。


7
它还具有“ -d”选项,该选项使您可以选择要保留的副本,并删除其他副本(或者,如果需要,可以保留所有副本)。
马修·克鲁姆利

如何使用-d选项来解决我的问题在这里
约翰·麦基恩普鲁特

fdupes是否可以列出重复的文件夹而不是重复的文件?
安德森·格林

2
您能否更详细地说明如何删除递归目录树中的所有重复项(每个文件仅保留一个副本)?我想自动执行此操作,也就是说,不必每次都指定要保留哪个文件。它应该只选择重复项之一。
becko

5
fdupes -r . -d -N应该保存第一个实例并删除重复对象。我刚刚成功使用fdupes . -d -N非递归方式清除了一个文件夹
Simon B

61

FSlint具有GUI和其他一些功能。常见问题中重复检查算法的说明:

1. exclude files with unique lengths
2. handle files that are hardlinked to each other
3. exclude files with unique md5(first_4k(file))
4. exclude files with unique md5(whole file)
5. exclude files with unique sha1(whole file) (in case of md5 collisions).

弗林特 安装fslint


12
谢谢。请注意,命令名称为“ fslint-gui”,默认情况下命令行工具不在$ PATH中-它们在/ usr / share / fslint / fslint中。当我仅通过运行fslint(通过/ usr / lib / command-not-found)而无法获得有关哪个软件包的帮助时,我感到困惑。
nealmcb 2011年

到底是什么需要
Tebe 2014年

1
@nealmcb如果使用sudo apt-get install fslint,当前安装确实会放入fslint-gui路径,因此我可以通过键入在任何地方运行它fslint-gui。您可以fslint-gui通过键入which fslint-gui(看起来像Python脚本)找到住所。
user29020 2014年

55

的列表programs/scripts/bash-solutions,可以找到重复项并在以下位置运行nix

  1. dupedit:一次比较多个文件而无需校验和。当多个路径指向同一文件时,避免将文件与自身进行比较。
  2. dupmerge:在各种平台上运行(带有Cygwin,* nix,Linux等的Win32 / 64)
  3. dupseek:Perl,其算法经过优化以减少读取。
  4. fdf:基于Perl / c,可在大多数平台(Win32,* nix以及其他平台)上运行。使用MD5,SHA1和其他校验和算法
  5. freedups:shell脚本,用于搜索您指定的目录。当找到两个相同的文件时,会将它们硬链接在一起。现在,两个或多个文件仍然存在于它们各自的目录中,但是磁盘上仅存储了一份数据副本;两个目录条目都指向相同的数据块。
  6. fslint:具有命令行界面和GUI。
  7. liten:纯Python重复数据删除命令行工具和库,使用md5校验和和新颖的字节比较算法。(Linux,Mac OS X,* nix,Windows)
  8. liten2:重写原始的Liten,仍然是命令行工具,但使用SHA-1校验和(Linux,Mac OS X,* nix)具有更快的交互模式
  9. rdfind:根据输入参数(要扫描的目录)的顺序对重复项进行排名的少数几个之一,以便在“原始/众所周知”的源中删除(如果给出了多个目录)。使用MD5或SHA1。
  10. rmlint:具有命令行界面的快速查找器以及许多查找其他皮棉的选项(使用MD5)
  11. ua:Unix / Linux命令行工具,旨在与find(等等)一起使用。
  12. findrepe:免费的基于Java的命令行工具,旨在有效地搜索重复文件,它可以在zip和jar中进行搜索。(GNU / Linux,Mac OS X,* nix,Windows)
  13. fdupe:用Perl编写的小脚本。快速有效地做好工作。1个
  14. ssdeep:使用上下文触发的分段哈希识别几乎相同的文件

4
这些程序中的任何一个都能找到重复的文件夹(而不仅仅是重复的文件吗?)
Anderson Green

3
@AndersonGreen rmlint可以找到重复的目录。rmlint -T dd
oligofren 2015年

对于Ubuntu,另一种方法是打开文件,搜索(control-f)给定的扩展名(例如.mp3),然后对文件名进行排序。这样可以手动删除重复项,并同时显示重复项的位置。
axd

6

如果您的重复数据删除任务与音乐有关,请首先运行picard应用程序以正确识别并标记您的音乐(以便您找到重复的.mp3 / .ogg文件,即使它们的名称不正确)。请注意,picard也可以作为Ubuntu软件包提供。

完成后,基于musicip_puid标签,您可以轻松找到所有重复的歌曲。


4

另一个完成此任务的脚本是rmdupe。从作者页面:

rmdupe使用标准linux命令在指定文件夹内搜索重复文件,而不管文件名或扩展名如何。在删除重复的候选者之前,将它们逐字节进行比较。rmdupe还可以针对一个或多个参考文件夹检查重复项,可以删除文件而不是删除它们,允许使用自定义删除命令,并且可以将其搜索限制为指定大小的文件。rmdupe包括一个模拟模式,该模式报告将对给定命令执行的操作而不会实际删除任何文件。


3

你有没有尝试过

finddup

要么

finddup -l

我想它工作正常。


2

对于音乐相关的重复识别和删除,http://musicbrainz.org/的Picard和Jaikoz 是最佳解决方案。Jaikoz我相信会根据歌曲文件的数据自动标记您的音乐。您甚至不需要歌曲的名称即可识别歌曲并为其分配所有元数据。虽然免费版一次只能标记有限数量的歌曲,但您可以根据需要运行多次。


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.