如何知道何时将文件添加到目录?

时间:2011-02-01 17:52:18

标签: linux shell directory notifications

在我们的linux服务器中,我们有一个在后台运行的程序,它在某个目录中创建文件。我想在将新文件添加到该目录时收到邮件。

我尝试使用Java,但这很复杂。所以我正在寻找一些更好的主意。是否有一些程序可以执行此操作或脚本?

3 个答案:

答案 0 :(得分:4)

好吧,我会过度使用(有这样的事吗?)并建议inotify-tools package的实用程序。

更具体地说是inotifywait工具:

# inotifywait -m /tmp
Setting up watches.  
Watches established.
/tmp/ OPEN,ISDIR 
/tmp/ CLOSE_NOWRITE,CLOSE,ISDIR 
.
.
.

通过grep管道输出并将其发送到Bash循环或其他东西。瞧!

编辑:

这是一个快速的&肮脏的单行:

inotifywait -m /tmp 2>/dev/null | grep --line-buffered '/tmp/ CREATE' | while read; do echo update | mail -s "/tmp updated" john@example.com; done

答案 1 :(得分:2)

你想要inotify。您也可能需要superuser.com; - )

答案 2 :(得分:1)

this answer中,我列出了三个允许您查看目录以进行更改的Ruby库。使用其中一个库和一个邮件库(如Pony)的脚本会相当简单。

使用my library和Pony脚本可能很简单:

require 'directorywatcher'
require 'pony'

# Only watch every two minutes
my_watcher = Dir::DirectoryWatcher.new( 'uploads', 120 )
my_watcher.on_add = Proc.new do |file_name,info|
  Pony.mail(
    via:         :smtp,
    via_options: { address: 'smtp.mydomain.com', domain:'mydomain.com' },
    from:        "Upload Notifier <noreply@mydomain.com>",
    to:          "admin@mydomain.com",
    subject:     "New File Uploaded!",
    body:        "A new file '#{file_name}' was just uploaded on #{info[:date]}"
  )
end
my_watcher.start_watching.join # Join the thread