2013-03-26 55 views
1

SHELL腳本去獲取郵件,如果文件中獲得修飾腳本檢查最後一個文件修改

我寫腳本來獲取郵件,如果文件已被修改

recip="[email protected]" 

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 

現在我收到郵件,當我運行此腳本但我想比較兩個變量,以便只有在修改了文件或更改了內容時才能收到郵件。 我怎樣才能輸出存儲在變量事先比較

感謝

薩加爾

回答

0

我會用找,看看在過去modifyed文件

#!/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 protected]" < /tmp/email.txt 
     fi 
fi 
+0

這個工作,但是當我運行這個腳本在crontab中通常會在2分鐘後發送一封郵件。我只想要郵件修改文件 – user2074481 2013-03-28 13:08:52

+0

@ user2074481檢查修改後的答案。 – bsmoo 2013-04-02 08:43:51

+0

這種可怕的縮進會導致眼癌。 – Jens 2013-04-02 11:04:08

0

我會做這種方式:

recip="[email protected]" 
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 

這個想法是存儲最後看到的ti通過將其複製到另一個文件(使用touch)來記錄感興趣的文件。然後我們總是知道最後一次是什麼,並且可以根據需要將它與文件和電子郵件上的當前時間戳進行比較。

0

如果我明白你的問題正確,邏輯可以通過在temp1中的文件存儲的「LS -ltr文件名」的輸出,並比較相同與LS -ltr輸出改變