inotifywait 未檢測到新目錄
下面的腳本監視目標目錄中的 close_write 事件並對文件執行一些操作
#!/bin/bash TARGET=/home/*/ftp/files inotifywait -m -r -e close_write $TARGET | while read directory action file do if [[ "$file" =~ .*jpg$ ]] || [[ "$file" =~ .*mp4$ ]] then # do sth with the file fi done
所以現在它正在正確地監視例如
/home/sammy/ftp/files
和下文件的 close_write 事件/home/neo/ftp/files
。我面臨的問題是一旦創建了一個新使用者,比如說 mike,那麼手錶似乎不再工作,我將不得不重新執行腳本,以便它知道新使用者的路徑,即 nohup程序需要被殺死並再次執行。
inotifywait 有什麼方法可以了解新創建的目錄嗎?
它會自動找到在
-r
它正在觀看的目錄下創建的新目錄。但是在這裡,它獲取路徑/home/sammy/ftp/files
和/home/neo/ftp/files
(等),並且/home/mike
不在其中任何一個之下,因此不會被檢測到。(請記住,它是在執行/home/*/ftp/files
之前擴展 glob 的 shellinotifywait
。)原則上,您可以觀看整個 of
/home
並手動忽略任何不在/home/*/ftp/files
. 但這會產生成堆的手錶並產生大量不需要的事件。
/home
除了/home/*/ftp/files
目錄之外,一個更好的主意可能是監視,並在看到在/home
. 如果任何新使用者總是ftp/files
立即創建目錄,那應該不會太糟糕。您可能應該明確地等待新ftp/files
目錄出現,這樣您就不會陷入腳本在創建新目錄inotifywait
之前重置的競爭ftp/files
,從而錯過它。(雖然重新啟動
inotifywait
會創建一個可以創建新文件的視窗,但腳本會失去它。使用某些直接支持 inotify 的程式語言可能會更安全。)一種完全不同的方法是更改目錄結構,以便
/home/$user/files/ftp
相關的東西 不是/srv/ftp/$user
. 然後你可以添加一個手錶/srv/ftp
,自動捕捉新使用者沒有問題。