我正在创建一个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分钟的脚本中运行 - 检查 - 发送电子邮件新文件退出 请建议......
答案 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