gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:06:32 24 4
gpt4 key购买 nike

我有一个正在运行的脚本正在检查多个目录并将它们与其他地方相同目录的扩展压缩包进行比较。

我正在使用 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 个文件,因此为每个文件执行 find 然后执行 diff 似乎有点开销。

我希望这样的事情可以工作,使用 elif 语句检查 $runid.tmp 是否包含数据,如果包含则中断。我在第一个 if 语句之后添加了 2>,因此 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

这行得通吗?

最佳答案

您可以使用“查找”循环遍历文件,并在文件不同时中断。例如对于 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 - 运行差异并让它停止差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com