Bash

inotifywait 未檢測到新目錄

  • May 18, 2022

下面的腳本監視目標目錄中的 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 的 shell inotifywait。)

原則上,您可以觀看整個 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,自動捕捉新使用者沒有問題。

引用自:https://unix.stackexchange.com/questions/703082