如何比较同一个文件并在linux

时间:2016-12-21 14:01:59

标签: bash shell scripting diff cmp

我正在文件上创建bash脚本以通过邮件发送diff

对于以下情况,我创建了两个文件"xyz.conf""xyz.conf_bkp"进行比较 到目前为止,我已经使用以下脚本 -

file="/a/b/c/xyz.conf"

while true
do
     sleep 1
     cmp -s $file ${file}_bkp
        if [ $? > 0 ]; then
            diff $file ${file}_bkp > compare.log
            mailx -s "file compare" abc@xyz.com < compare.log
            sleep 2
            cp $file ${file}_bkp
            exit
        fi
done

我已安排上述脚本每秒运行

* * * * 0-5 script.sh

这工作正常,但我正在寻找下面的不同方法 - 我希望在没有创建另一个备份文件的情况下工作想象一下,如果我必须处理多个文件,这将导致我创建那些看起来不太好的解决方案的备份。

有人可以建议,如何实施这种方法?

1 个答案:

答案 0 :(得分:0)

我会这样写。

while cmp "$file" "${file}_bkp"; do
  sleep 2
done
diff "$file" "${file}_bkp" | mailx -s "file compare" abc@xyz.com
cp "$file" "${file}_bkp"

我希望避免同时运行cmpdiff,但我不确定是否可以在没有临时文件或管道的情况下将数据从diff保存到您确定mailx是否应该运行。

<击>

<击>
while diff "$file" "${file}_bkp"; do
  sleep 2
done | {
  mailx -s "file compare" abc@xyz.com
  cp "$file" "${file}_bkp"
  exit
}

diff在退出状态为0时不会产生输出,因此当它最终具有非零退出状态时,其输出将被输出(作为{{1的输出) }}}循环)到运行whilemailx的复合命令。从技术上讲,cpmailx都可以从管道中读取,但cp将在mailx运行之前耗尽所有数据,并且此cp命令将忽略无论如何它的标准输入。