2010-11-19 8 views
5

私はファイルxyz.txtの変更を見たいと思って、変更があるときはいつでもファイル全体をメールします。このために1つのライナー(または数行のシェルスクリプト)がありますか?変更のためのファイルを見る

更新:

# Check if my.cnf has been changed in the last 24 hours 
# if yes, as in the following case, simply send the file 
# if it has not been changed in the last 24 hours, do nothing. 

# find /etc/ -name my.cnf -mtime 0 
/etc/my.cnf 

# cat /etc/my.cnf | mail [email protected] 

今、誰かがシェルスクリプトまたは1つのコマンドでこれらの2つの行をバインドする方法を表示することができます。

答えて

4

は、この試してみて:mail

find /etc/ -name my.cnf -mtime 0 -exec sh -c 'cat {} | mail -E -s "file changed" [email protected]' \; 

-Eオプションはfind何も返さないとcat何も出力しない場合のように(空の機関とのメッセージを送信することを防止する

+0

-Eオプションについては、mailコマンドの私のバージョンのために利用可能であるようには見えない – shantanuo

+1

@shantanuo:ここでは、出力が空でのみ配管[およそスーパーユーザーに質問です](http://superuser.com/q/210054/310)。 –

6

ファイルまたはディレクトリを監視して変更を報告できるinotifyを調べる必要があります。

+0

1リンク – GuruM

18

inotifywaitを使用できます。ファイルの変更を待ってからコマンドを実行します(例:msmtp)。

-2
#!/bin/ksh 

ls -lt /usr/tip30/prtfile/asb270.prt|awk '{print $6$7$8}'|awk -F: '{print $1$2}' 
> /tmp/lastupdated.temp 
read input_pid < /tmp/lastupdated.temp 
echo "$input_pid" 

while [ "$input_pid" -eq "`ls -lt /usr/tip30/prtfile/asb270.prt | awk '{print $6 
$7$8}'|awk -F: '{print $1$2}'`" ]; do 
    echo "file has not changed " 
    sleep 30 
done 
echo "file changed `ls -lt /tmp/lastupdated.temp`" 
rm /tmp/lastupdated.temp 
+1

あなたのコードをフォーマットしてください/これが手元の問題を解決する理由を説明してください。 –

1

inotify-hookableは、この目的のために非常に使いやすいperlスクリプトです(例えば、

)。ファイルの

-fコマンドは

を実行するために、私はそれがあまりにもリモートコンピュータ上でファイルを見ていた -cを見て、しかし、完成のinotify-hookable観ファイルがされる前に削除されたとき更新しました。

私はDebianからインストールしました。 CPANリンク:https://metacpan.org/pod/App::Inotify::Hookable

関連する問題