用于在缓存搜索结果时删除完全重复文件的程序


2

我们需要一个Windows 7程序来删除/检查重复项,但我们的情况与有足够程序的标准程序有些不同。

我们在几个磁盘上有一个相当大的静态存档(集合)照片。我们称之为Disk A..M。我们还有一些磁盘(我们称之为磁盘1..9),其中包含一些可在磁盘A..M上找到的重复项。

我们想在我们的系列中添加新磁盘(N,O,P ... aso。),它将包含来自磁盘1..9的照片,当然,我们不希望任何照片有两个(或更多) )次。

当然,从理论上讲,任务可以通过常规文件重复删除来解决,但所需的时间将非常长。

理想情况下,AFAIS现在,真正的解决方案是扫描磁盘A..M的程序,将照片的文件大小/哈希值存储在索引数据库/文件中,并检查新磁盘(1 .. 9)针对这个数据库。

但是我很难找到这样的程序(如果存在的话)。

其他注意事项:

  • 我们认为磁盘A..M(集合)上没有任何重复
  • 文件名可能会更改
  • 我们对近似(模糊)比较不感兴趣,这可以在一些照片比较程序中找到。我们寻找完全重复的文件。
  • 我们不怕命令行。:-)
  • 我们需要在Win7 / XP上工作
  • 我们(当然)更喜欢免费软件

磁盘A..M上有多少个文件和字节?
Dennis

@Dennis:你需要一个确切的号码吗?估计将是:400-500k文件需要4-5 TB
约翰托马斯

我尝试了一些工具(大多数已在此处列出),但似乎没有一个工具完全符合您的要求。基于命令行的方法可能是最好的解决方案,但我需要其他信息来建议。1)您可以同时访问磁盘吗?2)大约有多少个A..M和1..9的磁盘?3)这是一次性的事情还是你想存储数据库以备将来使用?
丹尼斯

回答:1。)不,我无法同时访问磁盘。但是,也许可以使用kludge。2.)现在我们有5(5)个磁盘可以(我的例子中的磁盘A..M)但是需要检查的“未知”磁盘数量。但是,我估计这些磁盘的数量(IOW在我的示例中为0..9个磁盘)为5-6。3.)是的,我想存储数据库以备将来使用。但是我认为(好吧,我希望)“主要清洁”只会发生一次。
约翰托马斯

1
而且我发现看起来好像有人确实醒过来了:duplicate-file-detective.com/v4/new.htm (我试过这个,我只是偶然发现它。)
Loren Pechtel 2015年

Answers:


4

基于Dennis解决方案,我们决定使用也可在Windows上使用的hashdeep套件。

基本用法:

步骤1.生成哈希值(这应该只执行一次)

hashdeep64 -c tiger -r "D:\*" > Disk_D.hash

我们使用tiger作为哈希函数 - 比SHA-1 更快更好(没有冲突)。

第2步:寻找重复项(必须为每个要检查的驱动器/目录执行此操作)

hashdeep64 -k Disk_D.hash -m -r "E:\My-Dir-To-Check\*" > Dupes.txt

现在所有重复项都存储在 Dupes.txt

您可以使用MsWord,LibreOffice或Notepad ++(或您知道的del任何其他方式)在此文本文件中插入(和/或任何其他选项)以删除文件。你必须在这里足够的变种,其中包括扫描,以删除所有输入的文件列表的简单.bat文件。

此外,您可以选择查看文件列表并手动执行处理。


2

阿布罗奇

  1. 选择无碰撞哈希函数。

    我的例子使用SHA1,因为无论如何瓶颈将是硬盘。

    如果这需要太长时间,则可以仅比较文件的第一兆字节。这对图像应该足够了。

  2. 读取磁盘A..M上感兴趣的文件,计算它们的哈希值并将它们存储在特定于该磁盘的文件中(以便稍后添加/删除磁盘)。

  3. 读取磁盘1..9上感兴趣的文件并计算它们的哈希值。

    如果文件的哈希已知,请执行操作(列表或删除)。

设定

  1. 下载并安装Cygwin,这是一组为Windows提供Linux外观环境的工具。

  2. 在Windows资源管理器中,打开该文件夹%ProgramFiles(x86)%\Cygwin\home\%USERNAME%

  3. 编辑文件.bashrc并附加以下行:

    export PATH=~:$PATH
    
  4. 创建一个名为的文件hashdrive并将以下代码保存到其中:

    #!/bin/bash
    
    DRIVELETTER=$(echo $1 | tr '[:upper:]' '[:lower:]')
    EXTENSIONS=$(echo $2 | sed 's/,/\\|/g')
    DRIVENAME=$(echo $3 | tr '[:upper:]' '[:lower:]')
    
    set -e
    [ -d /cygdrive/$DRIVELETTER ] || (echo "Drive $DRIVELETTER: does not exist." ; exit 1)
    [ -f ~/drives/$DRIVENAME ] && (echo "Hashfile for drive $DRIVENAME already exists." ; exit 1)
    set +e
    
    mkdir ~/drives 2>/dev/null
    find /cygdrive/$DRIVELETTER -type f -iregex ".*\.\($EXTENSIONS\)" -exec sha1sum {} \; | cut -b -40 > ~/drives/$DRIVENAME
    
  5. 创建一个名为的文件checkdrive并将以下代码保存到其中:

    #!/bin/bash
    
    DRIVELETTER=$(echo $1 | tr '[:upper:]' '[:lower:]')
    EXTENSIONS=$(echo $2 | sed 's/,/\\|/g')
    ACTION=$(echo $3 | tr '[:upper:]' '[:lower:]')
    
    set -e
    [ -d /cygdrive/$DRIVELETTER ] || (echo "Drive $DRIVELETTER: does not exist." ; exit 1)
    set +e
    
    IFS=":" ; for FILE in `find /cygdrive/$DRIVELETTER -type f -iregex ".*\.\($EXTENSIONS\)" -printf %p:`; do
        [ "$(grep -m 1 $(sha1sum "$FILE" | cut -b -40) ~/drives/*)" ] && $ACTION "$FILE"
    done
    

用法

  • 要将某个磁盘的所有映像的哈希值保存到文件,请启动Cygwin并执行以下命令:

    hashdrive DRIVELETTER EXTENSIONS DRIVENAME
    

    例如,如果磁盘A安装的驱动器D:,你想用哈希扩展名的所有图像jpg,并png使用下面的命令:

    hashdrive d jpg,png diska
    

    必须没有空间jpg,png

  • 要检查磁盘是否有重复映像,请启动Cygwin并执行以下命令:

    hashdrive DRIVELETTER EXTENSIONS ACTION
    

    例如,如果磁盘1安装为驱动器E:,并要列出与扩展所有重复的图像jpg,并png使用下面的命令:

    checkdrive e jpg,png echo
    

    如果要直接删除文件,请使用rm而不是echo

  • 要从数据库中删除磁盘,只需删除该文件DRIVENAME夹中的文件即可%ProgramFiles(x86)%\Cygwin\home\%USERNAME%\drive

警告

rm命令不会将文件移动到回收站; 它会直接删除它们。

尽管应该可以恢复文件,但在使用rm操作时要小心,并echo在使用之前尝试rm


我的结果好坏参半。在我的Linux机器上,运行速度比Win7机器快9倍。我希望这是因为Linux机器的硬盘驱动器速度更快,但是使用真正的 Linux 也可以运行得更顺畅。可能的改进:1)如果hashdrive运行速度太慢(我无法从这里检查),可以通过仅散列每个文件的第一兆字节来加快速度。这对图像应该足够了。2)checkdrive通过在存储桶中对哈希进行分组可以更快地制作。我会测试tommorow是否有市长影响。
Dennis

非常感谢 - 松散地解决您的解决方案后,我发布了一个完整/本机Windows解决方案(好吧,实际上它是跨平台的,因为hashdeep也在* nixes上运行)。此外,我选择不将命令封装在.bat文件中,因为命令非常简单。非常感谢,无论如何。Upvoted。
约翰托马斯

顺便说一句,Dennis SHA-1不是没有碰撞的。请参阅en.wikipedia.org/wiki/Sha-1 ...但对于逐日文件工作就足够了。我选择老虎来获得速度。
约翰托马斯

SHA-1被破坏(其80位的初始安全声明已减少到53位),但到目前为止还没有发现实际的冲突。
Dennis
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.