在Unix/Linux中判断两个文件是否相同的最快方法?
我有一个shell脚本,其中我需要检查两个文件是否相同。我对很多文件进行检查,在我的脚本中,diff
命令似乎是性能的瓶颈。
下面是这一行:
diff -q $dst $new > /dev/null
if ($status) then ...
能否有一种更快的方法来比较文件,也许是一种自定义算法,而不是默认的`diff'?
201
3
我相信
cmp
会在第一个字节的差异处停止:你为什么不获取两个文件内容的哈希值?
试试这个脚本,比如叫它script.sh,然后按如下方式运行: script.sh file1.txt file2.txt
对于没有差异的文件,任何方法都需要完全读过这两个文件,即使读的是过去的文件。
没有其他选择。 因此,在某个时间点上创建哈希值或校验值需要读取整个文件。大文件需要时间。
文件元数据的检索要比读取大文件快得多。
那么,有没有什么文件元数据可以用来确定这些文件是不同的? 文件大小?甚至是文件命令的结果,它确实只是读取了文件的一小部分?
文件大小的例子代码片段:
如果文件大小相同,那么你就只能进行全文件读取。