1

如果文件被修改,外壳脚本会收到邮件

如果文件已被修改,我正在编写脚本以获取邮件

recip="mungsesagar@gmail.com"

file="/root/sagar/ldapadd.sh"

#stat $file

last_modified=$(stat --printf=%y $file | cut -d. -f1)

#echo $last_modified

mail -s "File ldapadd.sh has changed" $recip

现在我在运行此脚本时收到邮件,但我想比较两个变量,以便只有在文件修改或内容更改时才能收到邮件。如何将输出存储在变量中以进行比较

提前致谢

萨加尔

4

3 回答 3

0

我会这样做:

recip="you@example.com"
file="/root/sagar/ldapadd.sh"
ref="/var/tmp/mytimestamp.dummy"

if [ "$file" -nt "$ref" ]; then
    mail -s "File ldapadd.sh has changed" $recip
fi

touch -r "$file" "$ref" # update our dummy file to match

这个想法是通过将感兴趣的文件复制到另一个文件(使用touch)来存储感兴趣的文件的最后看到的时间戳。然后我们总是知道上次是什么时间,并且可以根据需要将其与文件和电子邮件上的当前时间戳进行比较。

于 2013-03-26T13:41:05.550 回答
0

我会使用 find 查看最后修改的文件

#!/bin/bash 
file=timestamp.txt
if [ ! -f timestamp.txt ];
   then
      stat -f %Sm -t %Y%m%d%H%M%S $file > timestamp.txt
   else 
      timestamp=$(stat -f %Sm -t %Y%m%d%H%M%S $file) 
      filetime=$(cat filetime.txt)
      if [ "$filetime" = "$timestamp" ];
         then
            #Do nothing
         else
            echo "$file has been modified" >> /tmp/email.txt
            mail -s "File has changed" "email@domain.com" < /tmp/email.txt
      fi
fi
于 2013-03-26T13:40:17.940 回答
0

如果我正确理解您的问题,可以通过将“ls -ltr 文件名”的输出存储在 temp1 文件中并将其与 ls -ltr 输出进行比较来更改逻辑

于 2013-03-26T13:46:25.487 回答