新的文件监控脚本



我正在制作一个shell脚本,它可以"在任何新文件进入特定目录时向我发送电子邮件,并带有新文件的名称大小和时间戳"。

以下代码做得很好:

#!/bin/bash
monitor_dir=/path/to/dir
email=me@me.com
files=$(find "$monitor_dir" -maxdepth 1 | sort)
IFS=$'n'
while true
do
  sleep 5s
  newfiles=$(find "$monitor_dir" -maxdepth 1 | sort)
  added=$(comm -13 <(echo "$files") <(echo "$newfiles"))
  [ "$added" != "" ] &&
    find $added -maxdepth 1 -printf '%Tct%st%pn' |
    mail -s "incoming" "$email"
  files="$newfiles"
done

现在我想要cronjob的相同功能。这样我就可以每隔15分钟安排一次,并在每15分钟的脚本运行中检查电子邮件新文件退出
请建议。。。

您的cron应该是…

*/15 * * * * /path/to/your/script

还有你的剧本。。。

if [ ! -f /tmp/filemonitor.lck ]; then
  touch /tmp/filemonitor.lck
  monitor_dir=/path/to/dir
  email=me@gmail.com
  if [ ! -f /tmp/oldmonitor.txt ];then touch /tmp/oldmonitor.txt; fi;
  find "$monitor_dir" -maxdepth 1 | sort > /tmp/actual_monitor.txt
  added=$(comm -13 /tmp/oldmonitor.txt /tmp/actual_monitor.txt)
  echo $added
  [ "$added" != "" ] &&
  find $added -maxdepth 1 -printf '%Tct%st%pn' |
  mail -s "incoming" "$email"
  rm -f /tmp/oldmonitor.txt
  mv /tmp/actual_monitor.txt /tmp/oldmonitor.txt
  rm -f /tmp/filemonitor.lck
fi;

不得不更改文件的vars,但已测试并运行!!!

您应该使用inotifywait

更多信息和手册页:http://linux.die.net/man/1/inotifywait

使用这个:

monitor_dir=/tmp/1123
while true
do
    d=$(inotifywait -e  create $monitor_dir --format "%f" 2>/dev/null)
    if [[ -f $d ]]
    then
        #echo "filename is: " $monitor_dir/$d
        find $monitor_dir/$d  -printf '%Tct%st%pn'
    fi
done 

最新更新