加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 加快Cygwin上的文件比较(使用`cmp`)?

发布时间:2020-12-15 22:57:02 所属栏目:安全 来源:网络整理
导读:我在Cygwin上写了一个bash脚本,它更像是rsync,虽然不同,我相信我实际上不能将rsync用于我需要的东西.它迭代相应目录中的大约一千对文件,并将它们与cmp进行比较. 不幸的是,这似乎非常缓慢 – 大约十(编辑:实际上是25!)次,只要使用Python程序生成一组文件.
我在Cygwin上写了一个bash脚本,它更像是rsync,虽然不同,我相信我实际上不能将rsync用于我需要的东西.它迭代相应目录中的大约一千对文件,并将它们与cmp进行比较.

不幸的是,这似乎非常缓慢 – 大约十(编辑:实际上是25!)次,只要使用Python程序生成一组文件.

我是否正确地认为这是非常缓慢的?有没有简单的替代方案会更快?

(详细说明我的用例:我在一个临时目录中自动生成一堆.c文件,当我重新生成它们时,我只想将已更改的文件复制到实际的源目录中保持未更改的那些(使用他们的旧创建时间),以便make知道它不需要重新编译它们.不是所有生成的文件都是.c文件,所以我需要进行二进制比较而不是文本比较.)

解决方法

也许你应该使用Python来做一些甚至全部的比较工作呢?

如果文件大小相同,一个改进就是只打扰运行cmp;如果它们不同,显然文件已经改变.您可以考虑使用MD5或SHA1或SHA-256或任何您喜欢的内容(使用Python模块或扩展,如果这是正确的术语),而不是运行cmp.如果您认为自己不会处理恶意,那么MD5可能足以识别差异.

即使在shell脚本中,您也可以运行外部散列命令,并为其指定一个目录中所有文件的名称,然后为其指定其他目录中所有文件的名称.然后,您可以读取两组哈希值和文件名,并确定哪些已更改.

是的,听起来好像花了太长时间.但问题包括必须启动1000份cmp,以及其他处理.上面的Python和shell脚本建议都有共同点,它们避免运行程序1000次;他们试图尽量减少执行的程序数量.执行过程数量的减少将为您带来相当大的收益,我期待.

如果您可以保留“当前文件集”中的哈希值,并为新的文件集生成新的哈希值,然后进行比较,那么您将会做得很好.显然,如果缺少包含“旧哈希”(当前文件集)的文件,则必须从现有文件重新生成它.这在评论中略微充实了信息.

另一种可能性:您是否可以跟踪用于生成这些文件的数据中的更改,并使用它来告诉您哪些文件已更改(或者至少限制可能已更改的文件集,因此需要比较,因为你的评论表明大多数文件每次都是相同的).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读