首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集合A中的所有文件是否都包含在不同结构的集合B中?

集合A中的所有文件是否都包含在不同结构的集合B中?
EN

Stack Overflow用户
提问于 2011-11-04 06:56:08
回答 1查看 109关注 0票数 0

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

我如何确定,我可以安全地删除集合A(即集合A中的所有文件至少在集合B的某个地方存在一次)?

再说一遍,这是关于文件内容,而不是文件名。

  • diff和派生工具对我没有帮助,因为它们抱怨集合A和B之间的文件结构不同。
  • fdupes (http://linux.die.net/man/1/fdupes) (它比较文件大小和MD5签名,然后执行逐字节检查以进行验证)是检查双值的一个方便的工具,但对于删除从其中删除双重文件的集合却有一个难以预测的坏习惯。“手动”选项非常耗时。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-04 07:39:48

首先从两个集合md5sum文件中生成

代码语言:javascript
复制
    find CollectionA  -type f -print0 | xargs -0 md5sum -b > CollectionA.MD5SUM
    find CollectionB  -type f -print0 | xargs -0 md5sum -b > CollectionB.MD5SUM

之后,您将在CollectionB中找到所有丢失的文件。

代码语言:javascript
复制
   (while read MD5SUM FILENAME; do grep -qis $MD5SUM CollectionB.MD5SUM || echo $FILENAME does not exist in CollectionB; done)<CollectionA.MD5SUM

更方便

代码语言:javascript
复制
   (while read MD5SUM FILENAME; do grep -qis $MD5SUM CollectionB.MD5SUM || echo ${FILENAME#\*} does not exist in CollectionB; done)<CollectionA.MD5SUM

若要从文件名开头删除*,请执行以下操作。

你必须知道,这个解决方案很慢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8005819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档