Answers:
inotifywait(inotify-tools的一部分)是完成目标的正确工具,不管同时创建多个文件,它都会检测到它们。
这里是一个示例脚本:
#!/bin/sh
MONITORDIR="/path/to/the/dir/to/monitor/"
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE
do
echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "yourmail@addresshere.tld"
done
inotifywait将使用这些选项。
-m无限期监视目录,如果不使用此选项,则一旦检测到新文件,脚本将结束。
-r将递归监视文件(如果有很多目录/文件,则可能需要一段时间才能检测到新创建的文件)
-e create是用于指定要监视的事件的选项,在这种情况下,应创建它以处理新文件
--format'%w%f'将以/complete/path/file.name格式打印文件
“ $ {MONITORDIR}”是包含我们之前定义的监视路径的变量。
因此,在创建新文件的情况下,inotifywait将对其进行检测,并将输出(/complete/path/file.name)打印到管道,同时将输出分配给变量NEWFILE。
在while循环内,您将看到一种使用mailx实用程序将邮件发送到您的地址的方法,该方法应该可以与本地MTA(在您的情况下为Postfix)配合使用。
如果要监视多个目录,则inotifywait不允许它,但是有两个选项,为每个目录创建一个脚本以监视或在脚本中创建函数,如下所示:
#!/bin/sh
MONITORDIR1="/path/to/the/dir/to/monitor1/"
MONITORDIR2="/path/to/the/dir/to/monitor2/"
MONITORDIRX="/path/to/the/dir/to/monitorx/"
monitor() {
inotifywait -m -r -e create --format "%f" "$1" | while read NEWFILE
do
echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "yourmail@addresshere.tld"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &
使用inotifywait,例如:
inotifywait -m /path -e create -e moved_to |
while read path action file; do
echo "The file '$file' appeared in directory '$path' via '$action'"
# do something with the file
done
有关更多信息和示例,请参阅文章
如何使用inotify-tools触发文件系统事件上的脚本。
对于几个目录,您可以执行以下操作:
#!/bin/bash
monitor() {
inotifywait -m -r -e attrib --format "%w%f" --fromfile /etc/default/inotifywait | while read NEWFILE
do
echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "yourmail@addresshere.tld"
done
}
monitor &
这是文件中文件夹的示例列表 /etc/default/inotifywait
/etc/default/inotifywait
/home/user1
/path/to/folder2/
/some/path/