2009-02-04 180 views
21

很像similar SO question,我試圖監視Linux文件夾中的一個目錄以添加新文件,並且希望在這些新文件到達時立即處理這些新文件。任何想法實現這個最好的方式?更改監視器目錄

回答

23

inotify

隨着inotify,你可以看一個文件創建的目錄。

+3

Inotify不支持遞歸觀察目錄,這意味着必須爲每個子目錄創建一個單獨的inotify監視。記住這一點。 – Jason 2013-12-10 17:07:07

+0

另請參閱名爲[incron](http://inotify.aiken.cz/?section=incron&page=why)及其[手冊頁](http://linux.die.net/man/5/incrontab)的軟件包。我不確定它如何處理子文件夾。 – BeowulfNode42 2014-04-14 05:46:50

+0

不,incron不處理子文件夾,它在一個適當的「indiegogo」運動中完全失敗,incron在2012年打瞌睡。悲傷,但它到達了一個盲巷。我真的希望,inotify會保持;-) – Frunsi 2014-10-26 00:53:17

0

我想到的一個解決方案是創建一個「文件監聽器」,再加上一個cron作業。我對此並不着迷,但我認爲它可以奏效。

+0

如果您想盡快處理它們,則無法繞過inotify。 – 2009-02-04 14:20:13

25

首先確保inotify-tools的安裝。

然後使用它們像這樣:

logOfChanges="/tmp/changes.log.csv" # Set your file name here. 

# Lock and load 
inotifywait -mrcq $DIR > "$logOfChanges" & 
IN_PID=$$ 

# Do your stuff here 
... 

# Kill and analyze 
kill $IN_PID 
while read entry; do 
    # Split your CSV, but beware that file names may contain spaces too. 
    # Just look up how to parse CSV with bash. :) 
    path=... 
    event=... 
    ... # Other stuff like time stamps? 
    # Depending on the event… 
    case "$event" in 
    SOME_EVENT) myHandlingCode path ;; 
    ... 
    *) myDefaultHandlingCode path ;; 
done < "$logOfChanges" 

另外,在使用inotifywait代替--format-c將是一個想法。

只需man inotifywaitman inotifywatch瞭解更多信息。

您也可以使用incron並用它來調用處理腳本。