【发布时间】:2018-10-08 19:10:24
【问题描述】:
我必须将machineA 中/primary 和/secondary 文件夹中所有文件的校验和与远程服务器machineB 中此文件夹/bat/snap/ 中的文件进行比较。远程服务器将有很多文件以及我们在machineA 中的文件。
- 如果校验和有任何不匹配,那么我想用完整路径报告
machineA中存在问题的所有文件,并以非零状态码退出。 - 如果一切都匹配,则退出零。
我写了一个在machineA 上运行的命令(不确定是否有更好的编写方法),但它非常慢。有什么办法让它更快?
(cd /primary && find . -type f -exec md5sum {} +; cd /secondary && find . -type f -exec md5sum {} +) | ssh machineB '(cd /bat/snap/ && md5sum -c)'
它还会打印出像 ./abc_monthly_1536_proc_7.data: OK 这样的文件名。有什么方法可以在machineA上打印出该文件的完整路径名?
ssh 到每个文件的远程主机肯定不是很有效。 parallel 可以通过同时处理更多文件来加速它,但更有效的方法可能是稍微调整命令,使其通过 ssh 连接到 machineB 并一次性获取所有 md5sum。这可以吗?
【问题讨论】:
-
要输出绝对路径,只需给它当前的工作目录:
find $(pwd) -type f... -
我应该在我的命令中添加这个?
-
而不是
cd /primary && find . ...,只需使用find /full/path/primary.,只要您传递绝对路径,find 并不关心您的当前目录是什么。 -
我明白你的意思。现在明白了。另外我怎样才能使这个命令快速?有没有办法做到这一点?或者有什么更好的写法?
-
如果
/primary和/secondary位于不同的物理磁盘上,您可以通过将cd /secondary之前的;更改为&来稍微加快速度。否则,您已经以非常接近 AFAICT 的最大速度运行。
标签: linux bash shell checksum md5sum