
靈感來自這個超級使用者的回答我編寫了以下copy_library.sh
腳本,保存在與名為 的文件相同的資料夾中library.bib
:
#!/bin/sh
while inotifywait -e close_write library.bib; do
cp -f ./library.bib ../other_place/ ;
echo "Library copied"
done
如果我手動啟動此腳本,並且./copy_library.sh
進程在第一個副本後退出(成功運行):
londonrob ~/mydir
> ./copy_library.sh
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>
並且沒有跟踪任何進一步的更改。我確信我應該對這個腳本做一些事情,這樣它就可以在「後台」連續運行,而無需我手動啟動它。
但什麼?
答案1
從inotifywait
手冊頁:
inotifywait 使用 Linux 的 inotify(7) 介面有效地等待檔案變更。它適合等待 shell 腳本對檔案的變更。它可以在事件發生後退出,也可以在事件發生時持續執行和輸出事件。
和
-m, --monitor 無限期執行,而不是在收到單一事件後退出。預設行為是在第一個事件發生後退出。
編輯:我有一個日誌,每 15 秒追加一次。以下腳本對 inotifyread 輸出的每一行執行 while one 迴圈:
#!/bin/sh
inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
echo "$line"
echo "Copy coperation here..."
done
當然,在您的情況下,您必須將事件(修改)變更為 close_write 。