inotify 腳本在第一次更改後停止

inotify 腳本在第一次更改後停止

靈感來自這個超級使用者的回答我編寫了以下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 。

相關內容