Linux 新的文件监视脚本
我正在制作一个shell脚本,它可以在任何新文件出现在特定目录时向我发送电子邮件,并带有新文件的名称、大小和时间戳 以下代码很好地完成了这项工作:Linux 新的文件监视脚本,linux,bash,shell,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" -ma
#!/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分钟的脚本运行中检查电子邮件新文件退出。
请建议……您的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;
必须为文件更改变量,但已测试并工作 您应该使用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
它需要一些调整,因为按原样,每次调用都会进入一个无限循环,但现在它只会捕获在find的两次调用之间创建的新文件。如果它是从cron这样运行的,它将需要将状态存储在某个地方,可能是一个文件。或者对find.cmh使用-mtime命令,这就是问题所在。没有cron脚本是完美的,但是如果我们想在cron中运行这个脚本,那么我们需要寻找其他的解决方案。因为一旦脚本退出,变量中就不会有以前的值。../imp.sh:第9行:意外标记附近的语法错误,然后“。/imp.sh:第9行:如果[!-f/tmp/oldmonitor.txt];然后触摸/tmp/oldmonitor.txt;fi;'在上述代码的第7行给出错误,然后触摸/tmp/oldmonitor.txt;fi;错误是意外标记“then touch/tmp/oldmonitor.txt”附近的语法错误;fi;'为什么不把睡眠时间改为15分钟?睡眠时间更改睡眠时间不会退出正在运行的进程。我希望每15分钟运行一次检查电子邮件新文件退出程序。这样做的原因是减少资源消耗鉴于您在linux上,您可以从inotify工具中检查inotifywait,这正是出于此目的。不需要定期检查-当新文件进入时,它会通知,否则就在那里等待。我不能使用inotify。只有cron和script是options@Readerlook这是家庭作业吗?为什么你有工具的限制?在上面的回答中,我得到了一切。还需要一个帮助,通过使用“%Tc\t%s\t%p\n”,我获得了文件名为的完整路径。我只需要最后一两个目录和文件名。有谁能建议我如何做到这一点吗?你知道怎么做吗