新文件监视脚本

时间:2014-04-29 20:14:32

标签: linux bash shell

我正在创建一个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 '%Tc\t%s\t%p\n' |
    mail -s "incoming" "$email"

  files="$newfiles"
done

现在我想要与cron作业相同的功能。所以我可以按15分钟的时间间隔安排它,并在每15分钟的脚本中运行 - 检查 - 发送电子邮件新文件退出 请建议......

2 个答案:

答案 0 :(得分:0)

你的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 '%Tc\t%s\t%p\n' |
  mail -s "incoming" "$email"

  rm -f /tmp/oldmonitor.txt

  mv /tmp/actual_monitor.txt /tmp/oldmonitor.txt

  rm -f /tmp/filemonitor.lck

fi;

必须更改文件的变量,但已经过测试和工作!!!

答案 1 :(得分:0)

你应该使用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 '%Tc\t%s\t%p\n'
    fi
done