スクリプトを使用してファイルを観察し、60秒ごとにファイルのmd5sumを比較して変更された場合は、画面に警告を印刷してみてください。
何をすべきかわかりません。それが私が持っているのですが、少し外れたようです。
#/bin/bash
watch=$@
if [ -z "$watch" ]
then
echo "No file specified, aborting"
exit
else
echo "watching : $watch"
fi
while [ 1 ]; do
watch -n 60 -d md5sum $watch
done
私もこれを行いましたが、うまくいくようです(一種の)。ファイルが変更されたかどうかを通知しますが、watchコマンドを使用しません。ウォッチでこれを行う方法はありますか?
#/bin/bash
watch=$@
if [ -z "$watch" ]
then
echo "No file specified, aborting"
exit
else
echo "watching : $watch"
fi
checksum1="empty"
while [ 1 ]; do
checksum2=$(md5sum $watch | md5sum | cut -d ' ' -f1)
if [ "$checksum2" != "$checksum1" ];
then
echo "Warning : $watch has been changed"
#mail -s "$watch has been changed" "[email protected]"
echo -e "\a"
fi
checksum1="$checksum2"
sleep 60
done
ベストアンサー1
あなたははるかに良い状況にありますinotify、これはファイル監視という目的で作成されました。
編集する:リンクされた質問に対する回答をここにまとめます。
ファイルやディレクトリを監視する必要があるときはいつでも、inotifyはその操作に適したツールです。監視したいイベント(ファイルへのアクセス、変更、開く、閉じる、削除など)をinotifywaitに通知できます(man inotifywait
詳細を見る)。
最初の方法は次のループです。
while inotifywait -e close_write myfile.py; do ./myfile.py; done
最大の欠点は、イベントを見逃すことができることです。より効率的なバージョンは次のとおりです。
inotifywait -mq --format '%e' /path/to/file |
while IFS= read -r events; do
/path/to/script "$events"
done
この後者のバージョンでは、イベントを見逃すことはありません。パイプはイベントがキューに入っていることを確認します。ループが時間内に選択されていない場合は積み重ねられますが、欠落している項目はありません。
編集する:テキストファイルを追跡する場合は、強力なハッシュを使用してファイルを追跡するので、gitもお勧めします。以下はメインループのbash擬似コードですinotify
:
git status file # Tells whether <file> was modified
if file was modified; then
git commit -- file # Add <file> to the repository
keep only the last two versions of <file>
print the warning message
fi
これをベースとして使用できます。たぶん、git
出力を解析する必要があります。私はあなたに正しい方法を話すのに十分に使用していませんが、それがトリックを実行できるような直感があります;-)。