我需要一个实用程序来查找包含重复数据的 RAR 文件(即 RAR 中的哈希值相同但名称可能不同的文件)。
我可以打开 RAR 并看到 CRC 是相同的,但我希望有一个能够批量(数百个文件)处理的更自动化的过程。
对整个 RAR 进行散列处理不会有帮助,因为其中包含的文件可能有不同的名称,或者档案可能在不同的级别被压缩。
如果需要的话,可以使用提取 RAR 内容然后进行比较的实用程序,但这不是首选。
我更喜欢适用于 Windows 的免费实用程序,但付费实用程序或适用于 Linux 的实用程序也是可以接受的。
答案1
您可能只需一步即可完成所有这些工作,但这样做可能会更容易(linux):
for i in *.rar ; do unrar l $i | tail -n+8 | head -n-3 | awk -v val=$i '{ printf("\"%s\" \"%s\" \"%s\"\n",val,$1,$8)}' >> rarfiles; done
这将遍历当前目录中的所有文件,并将 rars 中的所有文件输出到名为 rarfiles 的文件中,如下所示:
"rar name" "filename" "crc"
“head”和“tail”命令只是从 unrar 输出中删除页眉和页脚。然后 awk 提取第一个和第八个字段,$i(rar 文件名)通过 -v 作为参数传递,因此我们可以将其与输出一起打印。
然后
cat rarfiles | sort -k3,3 | uniq -D -f2
这将显示重复项。sort 参数表示应按第三个字段 (crc) 进行排序,uniq -D 表示仅显示重复的行,忽略前两个字段(这样会跳过“rar 名称”和“文件名”,因此仅显示具有相同 CRC 的重复项。