【问题标题】:how to compare same file and send mail in linux如何在linux中比较相同的文件并发送邮件
【发布时间】:2016-12-21 14:01:58
【问题描述】:

我正在一个文件上创建 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

这工作正常,但我正在寻找不同的方法,如下所示 - 我希望在不创建另一个备份文件的情况下工作

谁能建议,如何实施这种方法?

【问题讨论】:

  • 使用管道.....
  • 如果您想比较可能更改的文件,备份似乎是必要的。您想避免创建 compare.log 吗?
  • 嗨@chepner,compare.log 我用来通过邮件向我发送差异。我们可以避免它并将差异直接发送到邮件而不是写入文件吗?但是如果发现很多差异,那么在不使用文件的情况下很难发送那么多差异 o/p。如果可能,请告诉我
  • 查看我的答案,我将diff 的(最终)输出直接传送到mailx,而不是将其写入磁盘。
  • 没有像“$file”这样的选项吗?我可以用一些“2|5 秒前”保存 -> 将它保存到 var 然后比较这两个 var。像下面的 \n $file="xyz.conf" 和 $file1="$file 前 5 秒",然后做 diff $file1 $file.我已经检查了一些存储日期的链接,但我的方法没有关闭..

标签: bash shell scripting diff cmp


【解决方案1】:

我会这样写。

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 时将不产生任何输出,因此当它最终具有非零退出状态时,其输出将通过管道传输(作为 while 循环的输出)到运行 @ 的复合命令987654329@ 和cp。从技术上讲,mailxcp 都可以从管道中读取,但mailx 将在cp 运行之前耗尽所有数据,并且此cp 命令无论如何都会忽略其标准输入。

【讨论】:

  • 这里,为什么我使用“exit”,就像一旦发现差异就应该退出循环,所以我只在“if loop”中使用了exit
  • 在这种情况下,您可以删除外部循环和sleep 1;代码将停留在内部循环中,直到 diff 真正发现差异。
  • 嗨@chepner,上面的脚本不断向我发送大量具有相同更改的电子邮件
  • cp 之后再次添加exit 以确保在复制完成后退出运行mailxcp 的子shell。我怀疑管道是异步的,允许diffmailxcp 完成之前再次运行,从而触发diff 的一系列无休止的输出。
  • 其实这可能没用,因为如果下次调用diff时运行的是mailx,它会继续读取重复的diff。我不确定我能否解决此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2017-12-08
  • 2016-01-03
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多