如何知道一个文件中有什么以及另一个文件中没有什么?

如何知道一个文件中有什么以及另一个文件中没有什么?

我检查nrpenagios备份的文件,并发送到Amazon S3。我有两个文件,s3,其中列出了我在 Amazon 中已经拥有的所有文件。 并且local列出了我机器中的所有文件。我需要知道 中有哪些文件local, 中没有哪些文件s3。示例:

s3

2013-07-01 04:49       145   32ddd73694ab610c3f077a88fb9f3300  s3://company-backup/company-logs/file.1.gz
2013-07-01 04:57       145   68adf73694ab610c3f077a88fb9f3300  s3://company-backup/company-logs/file.2.gz
2013-07-01 05:12       145   36ede43644ab710c8f077a88fb9f3300  s3://company-backup/company-logs/file.3.gz

当地的

32ddd73694ab610c3f077a88fb9f3300  /company-logs/file.1.gz
68adf73694ab610c3f077a88fb9f3300  /company-logs/file.2.gz
36ede43644ab710c8f077a88fb9f3300  /company-logs/file.3.gz
72ede57455eb850c8f078a88fb9f5900  /company-logs/file.4.gz

请注意,这72ede57455eb850c8f078a88fb9f5900 /company-logs/file.4.gz不在s3文件中。而这正是应该返回给我的,我该怎么做呢?

谢谢你!

答案1

一句话:

diff <(awk '{print $4}' s3 | sort) <(awk '{print $1}' local | sort)

基本上,它的作用是比较 的输出awk,我们将分别使用它来打印文件的第四列和第一列。如果哈希值的顺序不同,我们需要对输出进行排序。语法<(…)是进程替换,允许我们在两个命令的输出上运行diff,而通常它只允许您处理文件。

它输出:

<
---
> 72ede57455eb850c8f078a88fb9f5900

因此您会知道72ede57455eb850c8f078a88fb9f5900只在“正确”的文件中,即local

相关内容