如果我有两个文件集合:A和B(比如两个照片集)。两个集合之间存在重叠(集合A中的所有照片也存在于集合B中 - 可能具有不同的文件名)但在(可能)不同的目录结构中。此外,集合A中的文件可能会在集合B的不同位置出现多次,反之亦然(尽管文件名可能不同)。
我怎么能肯定地知道我可以安全地删除集合A(即集合A中的所有文件至少在集合B的某处存在一次)?
同样,它是关于文件内容,而不是文件名。
diff和衍生物对我没有帮助,因为他们抱怨集合A和B之间的文件结构不同。
fdupes(http://linux.die.net/man/1/fdupes)(比较文件大小和MD5签名,然后执行逐字节检查以进行验证)是一个方便的工具检查双打,但有一个令人讨厌的习惯,即从哪个集合中删除双文件是不可预测的。 “手动”选项非常耗时。
fdupes似乎也是错误的工具。我只需要知道集合A中的所有文件是否都计入集合B中。
答案 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
从文件名的开头删除*。
你必须意识到,这个解决方案很慢。