2010-10-20 76 views
6

在unix系统上,我该如何监视(如“尾巴”的工作方式)文件所做更改的目录 - 无论是新建的文件还是更改的大小等。监控更改目录列表?

寻找命令行工具而不是需要安装的东西。

回答

1

如果你不想安装工具,你可以自己制作。只是一个想法。 使用find命令创建目录的基线文件。使用循环或cron作业,find使用相同参数的目录,并根据基线文件检查新文件。使用工具,如diff,以获得差异..

find /path [other options] >> baseline.txt 
while true #or use a cron job 
do 
    find /path [same options] >> listing.txt 
    diff baseline.txt listing.txt 
    # do processing here... 
    mv listing.txt baseline.txt # update the baseline. 
    sleep 60 
done 
+0

仅供我参考 - 做这样的事情存在吗? – siliconpi 2010-10-20 13:02:38

+0

你在说什么“事情”?如果你正在谈论用于这些事情的工具,那么是的。像tripwire,inotify等工具... – ghostdog74 2010-10-20 13:06:56

5

大多数Unix变体对于这样的一个API,但它不规范。在Linux上,有inotify。在命令行上,您可以使用inotifywait。用例:

inotifywait -m /path/to/dir | while read -r dir event name; do 
    case $event in 
    OPEN) echo "The file $name was created or opened (not necessarily for writing)";; 
    WRITE) echo "The file $name was written to";; 
    DELETE) echo "The file $name was deleted ";; 
    esac 
done 

inotify的事件类型往往不完全是你想要什么通知(例如OPEN很宽),所以如果你最终使自己的文件检查不心疼。

+0

这是正确的答案,因为它显示了如何使用API​​来监视更改。 ghostdog74的答案可能有用,但它有资源成本。如果你需要监控1000个目录呢? – 2012-05-08 17:17:42

+0

注意:这个答案只适用于使用Linux内核2.6.13或更高版本。不知道其他Unicies。 – 2013-07-17 14:55:42

+0

请您澄清一下* *阅读-r目录事件名称; *做* *? – arod 2013-10-29 23:09:49