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

linux – 运行差异并让它停止差异

发布时间:2020-12-14 00:06:00 所属栏目:Linux 来源:网络整理
导读:我有一个运行的脚本,它检查多个目录并将它们与其他地方相同目录的扩展tarball进行比较. 我正在使用diff -r -q,我想要的是当diff在递归运行中发现任何差异时,它将停止运行而不是在同一运行中经历更多目录. 所有帮助赞赏! 谢谢 @bazzargh我确实像你建议或喜欢
我有一个运行的脚本,它检查多个目录并将它们与其他地方相同目录的扩展tarball进行比较.

我正在使用diff -r -q,我想要的是当diff在递归运行中发现任何差异时,它将停止运行而不是在同一运行中经历更多目录.

所有帮助赞赏!

谢谢

@bazzargh我确实像你建议或喜欢这样尝试.

for file in $(find $dir1 -type f); 
do if [[ $(diff -q $file ${file/#$dir1/$dir2}) ]]; 
then echo differs: $file > /tmp/$runid.tmp 2>&1; break; 
else echo same: $file > /dev/null; fi; done

但这仅适用于两个目录中存在的文件.如果丢失了一个文件,我将无法获得相关信息.我正在使用的目录也有超过300.000个文件,因此对每个文件进行查找然后差异似乎有点费用.

我希望这样的东西可以工作,使用和elif语句检查$runid.tmp是否包含数据,如果确实如此则会中断.我添加了2>在第一个if语句之后,将stderr发送到$runid.tmp文件.

for file in $(find $dir1 -type f); 

do if [[ $(diff -q $file ${file/#$dir1/$dir2}) ]] 2> /tmp/$runid.tmp; 

then echo differs: $file > /tmp/$runid.tmp 2>&1; break; 

elif [[ -s /tmp/$runid.tmp ]]; 

then echo differs: $file >> /tmp/$runid.tmp 2>&1; break;

else echo same: $file > /dev/null; fi; done

这会有用吗?

解决方法

您可以使用’find’对文件进行循环,并在它们不同时进行中断.例如,对于dirs foo,bar:

for file in $(find foo -type f); do if [[ $(diff -q $file ${file/#foo/bar}) ]]; then   echo differs: $file; break; else echo same: $file; fi; done

注意,这不会检测’bar’是否包含’foo’中不存在的目录.

编辑补充说:我刚刚意识到我忽略了一个非常明显的解决方案:

diff -rq foo bar | head -n1

(编辑:李大同)

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

    推荐文章
      热点阅读