我正在使用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总结
以上是内存溢出为你收集整理的linux – 运行差异并让它停止差异全部内容,希望文章能够帮你解决linux – 运行差异并让它停止差异所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)