根据校验和递归区分两个目录?

根据校验和递归区分两个目录?

我试图通过内容的校验和来查找哪些文件不存在。我有两个目录/foo/bar这两个目录代表系统上的任意状态,我想找到所有文件在 root 中/bar不存在于 root 中/foo(递归地)。/bar/**与的词典

CheckSum -> filepath

/foo/**减去with的字典

CheckSum -> filepath  

我可以使用 md5sum 或其他东西来编写此内容,但必须已经有一个实用程序可以执行此操作。

只是为了清楚起见,如果两个文件相同除了按位置(名称和路径)我希望它们被识别为相同的。

测试用例

让我们用一些测试数据创建一棵树,

/tmp/foo
└── myFile (duplicate of /tmp/bar/quz/asdf/otherFileName)
/tmp/bar
├── qaz
│   └── findMe
└── quz
    └── asdf
        └── otherFileName (duplicate of /tmp/foo/myFile)

创作脚本,

mkdir -p /tmp/foo /tmp/bar/quz/asdf /tmp/bar/qaz

# One file that exists in both locations
dd if=/dev/urandom of=/tmp/foo/myFile bs=1k count=10
cp /tmp/foo/myFile /tmp/bar/quz/asdf/otherFileName

# One file (findMe) that exists in only /mpt/bar/
dd if=/dev/urandom of=/tmp/bar/qaz/findMe bs=1k count=10

所以程序比较/tmp/foo/tmp/bar应该发现/tmp/bar/qaz/findMe

答案1

我会为两个树生成一个 md5sum 列表(一列表示总和,一列表示文件名),并将结果通过管道传输到一个脚本(例如 awk 或 perl)中,该脚本可以使用总和作为文件名的哈希值,并使脚本报告具有相同哈希值的文件名。

这不仅仅是一句简单的话,而且是经常被问到、经常被解决的问题(按内容搜索重复文件的结果超过一百万次)。

您可能会发现这很有帮助:

相关内容