2009-02-04 159 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并用它来调用处理脚本。