我有一个shell脚本,需要在其中检查两个文件是否包含相同的数据。我对很多文件执行此操作,在我的脚本中,diff
命令似乎是性能瓶颈。
下面是这句话:
diff -q $dst $new > /dev/null
if ($status) then ...
有没有更快的方法来比较这些文件,也许是一种自定义算法,而不是默认的diff
发布于 2012-10-16 01:15:56
我相信cmp
会在第一个字节的差值处停止:
cmp --silent $old $new || echo "files are different"
发布于 2015-10-01 09:01:56
我喜欢@Alex Howansky在这方面使用了'cmp --silent‘。但是我需要正面和负面的响应,所以我使用:
cmp --silent file1 file2 && echo '### SUCCESS: Files Are Identical! ###' || echo '### WARNING: Files Are Different! ###'
然后,我可以在终端中运行此命令,或者使用ssh根据常量文件检查文件。
发布于 2012-10-16 02:38:15
对于没有区别的文件,任何方法都需要完全读取这两个文件,即使读取是在过去。
没有其他选择。因此,在某个时间点创建散列或校验和需要读取整个文件。大文件需要时间。
文件元数据检索比读取大文件快得多。
那么,有没有什么文件元数据可以用来确定文件是不同的呢?文件大小?或者甚至是文件命令的结果,它只读取文件的一小部分?
文件大小示例代码片段:
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'
如果文件大小相同,那么您将遇到完全文件读取的问题。
https://stackoverflow.com/questions/12900538
复制相似问题