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

このスクリプトを実行するとメールが届くようになりましたが、2 つの変数を比較して、ファイルが変更されたかコンテンツが変更された場合にのみメールを取得できるようにしたいと考えています。出力を変数に格納して比較するにはどうすればよいですか

前もって感謝します

サーガル

4

3 に答える 3

0

あなたの質問が正しいと理解できれば、「ls -ltr filename」の出力を temp1 ファイルに保存し、それを ls -ltr の出力と比較することで、ロジックを変更できます。

于 2013-03-26T13:46:25.487 に答える
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

私はこのようにします:

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 に答える