私はこのbashスクリプトを持っています:
#!/bin/bash
inotifywait -m -e close_write --exclude '\*.sw??$' . |
#adding --format %f does not work for some reason
while read dir ev file; do
cp ./"$file" zinot/"$file"
done
~
さて、同じことを行うだけでなく、ファイル名をログ ファイルに書き込むことで削除を処理するにはどうすればよいでしょうか。何かのようなもの?
#!/bin/bash
inotifywait -m -e close_write --exclude '\*.sw??$' . |
#adding --format %f does not work for some reason
while read dir ev file; do
# if DELETE, append $file to /inotify.log
# else
cp ./"$file" zinot/"$file"
done
~
編集:
CLOSE_WRITE,CLOSE
生成されたメッセージを調べたところ、ファイルが閉じられるたびに inotifywait が生成されることがわかりました。それが今、自分のコードでチェックしているものです。もチェックしようとしましDELETE
たが、何らかの理由でコードのそのセクションが機能していません。見てみな:
#!/bin/bash
fromdir=/path/to/directory/
inotifywait -m -e close_write,delete --exclude '\*.sw??$' "$fromdir" |
while read dir ev file; do
if [ "$ev" == 'CLOSE_WRITE,CLOSE' ]
then
# copy entire file to /root/zinot/ - WORKS!
cp "$fromdir""$file" /root/zinot/"$file"
elif [ "$ev" == 'DELETE' ]
then
# trying this without echo does not work, but with echo it does!
echo "$file" >> /root/zinot.txt
else
# never saw this error message pop up, which makes sense.
echo Could not perform action on "$ev"
fi
done
dirでは、私はそうしますtouch zzzhey.txt
。ファイルがコピーされます。私はそうしvim zzzhey.txt
、ファイルの変更がコピーされます。rm zzzhey.txt
ファイル名がログ ファイルに追加されますzinot.txt
。素晴らしい!