はじめに
タイトル通り,特定のファイルを転送し終わった際にそのファイルを削除する方法を説明します.どこで使うんだという話について,私は実験でファイルを転送するのですが,繰り返し実験するために自動化したい時があります.その時既にファイルが転送されているとファイル転送の実験ができないため,初期化のためファイルを削除したいときがあります.そういうときのためのプログラムを紹介します.
プログラム
futa@futa-backup3:~$ cat auto_rm.sh
function auto_remover () {
watch=( -e MOVED_TO -m)
inotifywait ${watch[@]} [消したいファイルの転送先パスを入力] | while read notice
do
if [ "`echo $notice | awk "{print \$2;}" | grep MOVED_TO`" ]
then
echo "ファイル削除"
rm [消したいファイルの名前を入力]
else
echo "削除対象無し"
fi
sleep 10
done
}
auto_remover &
入力が必要なのは,[消したいファイルの転送先パスを入力]と,[消したいファイルの名前を入力]の2つの部分です.基本的には,inotifyでファイルを動きを監視し,ファイルが全て転送されたら削除しているだけです.検知にCLOSE_WRITEではなくMOVED_TOを使っている理由は,ファイルを転送し終わったとき,一番最後に検知されるのがMOVED_TOだからです.検知されるファイルの状態はCREATE→OPEN→ATTRIB→MODIFY→CLOSE_WRITE→ATTRIB→MOVED_FROM→MOVED_TOの順番です.
出力結果
出力結果は以下の通りです.
指定されたファイルしか検知しないので,より汎用的にファイルを削除したい場合は,このプログラムを変更する必要があります.