我正在文件上创建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
这工作正常,但我正在寻找下面的不同方法 - 我希望在没有创建另一个备份文件的情况下工作想象一下,如果我必须处理多个文件,这将导致我创建那些看起来不太好的解决方案的备份。
有人可以建议,如何实施这种方法?
答案 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"
我希望避免同时运行cmp
和diff
,但我不确定是否可以在没有临时文件或管道的情况下将数据从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的输出) }}}循环)到运行while
和mailx
的复合命令。从技术上讲,cp
和mailx
都可以从管道中读取,但cp
将在mailx
运行之前耗尽所有数据,并且此cp
命令将忽略无论如何它的标准输入。
击>