首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Unix/Linux中判断两个文件是否具有相同内容的最快方法?

在Unix/Linux中判断两个文件是否具有相同内容的最快方法?
EN

Stack Overflow用户
提问于 2012-10-16 01:06:13
回答 6查看 239.9K关注 0票数 280

我有一个shell脚本,需要在其中检查两个文件是否包含相同的数据。我对很多文件执行此操作,在我的脚本中,diff命令似乎是性能瓶颈。

下面是这句话:

代码语言:javascript
复制
diff -q $dst $new > /dev/null

if ($status) then ...

有没有更快的方法来比较这些文件,也许是一种自定义算法,而不是默认的diff

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-16 01:15:56

我相信cmp会在第一个字节的差值处停止:

代码语言:javascript
复制
cmp --silent $old $new || echo "files are different"
票数 464
EN

Stack Overflow用户

发布于 2015-10-01 09:01:56

我喜欢@Alex Howansky在这方面使用了'cmp --silent‘。但是我需要正面和负面的响应,所以我使用:

代码语言:javascript
复制
cmp --silent file1 file2 && echo '### SUCCESS: Files Are Identical! ###' || echo '### WARNING: Files Are Different! ###'

然后,我可以在终端中运行此命令,或者使用ssh根据常量文件检查文件。

票数 66
EN

Stack Overflow用户

发布于 2012-10-16 02:38:15

对于没有区别的文件,任何方法都需要完全读取这两个文件,即使读取是在过去。

没有其他选择。因此,在某个时间点创建散列或校验和需要读取整个文件。大文件需要时间。

文件元数据检索比读取大文件快得多。

那么,有没有什么文件元数据可以用来确定文件是不同的呢?文件大小?或者甚至是文件命令的结果,它只读取文件的一小部分?

文件大小示例代码片段:

代码语言:javascript
复制
  ls -l $1 $2 | 
  awk 'NR==1{a=$5} NR==2{b=$5} 
       END{val=(a==b)?0 :1; exit( val) }'

[ $? -eq 0 ] && echo 'same' || echo 'different'  

如果文件大小相同,那么您将遇到完全文件读取的问题。

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

https://stackoverflow.com/questions/12900538

复制
相关文章

相似问题

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