集合A中的所有文件都是在不同结构的集合B中占据的吗?

时间:2011-11-04 06:56:08

标签: file bash compare

如果我有两个文件集合:A和B(比如两个照片集)。两个集合之间存在重叠(集合A中的所有照片也存在于集合B中 - 可能具有不同的文件名)但在(可能)不同的目录结构中。此外,集合A中的文件可能会在集合B的不同位置出现多次,反之亦然(尽管文件名可能不同)。

我怎么能肯定地知道我可以安全地删除集合A(即集合A中的所有文件至少在集合B的某处存在一次)?

同样,它是关于文件内容,而不是文件名。

  • diff和衍生物对我没有帮助,因为他们抱怨集合A和B之间的文件结构不同。

  • fdupes(http://linux.die.net/man/1/fdupes)(比较文件大小和MD5签名,然后执行逐字节检查以进行验证)是一个方便的工具检查双打,但有一个令人讨厌的习惯,即从哪个集合中删除双文件是不可预测的。 “手动”选项非常耗时。

fdupes似乎也是错误的工具。我只需要知道集合A中的所有文件是否都计入集合B中。

1 个答案:

答案 0 :(得分:1)

首先从两个集合制作md5sum文件

    find CollectionA  -type f -print0 | xargs -0 md5sum -b > CollectionA.MD5SUM
    find CollectionB  -type f -print0 | xargs -0 md5sum -b > CollectionB.MD5SUM

之后你会在CollectionB中找到所有丢失的文件

   (while read MD5SUM FILENAME; do grep -qis $MD5SUM CollectionB.MD5SUM || echo $FILENAME does not exist in CollectionB; done)<CollectionA.MD5SUM

更加方便

   (while read MD5SUM FILENAME; do grep -qis $MD5SUM CollectionB.MD5SUM || echo ${FILENAME#\*} does not exist in CollectionB; done)<CollectionA.MD5SUM

从文件名的开头删除*。

你必须意识到,这个解决方案很慢。