我想每天使用 linux bash 脚本监视目录中的新文件。
新文件每 4 小时左右添加到目录中。所以我想在一天结束时处理所有文件。通过过程,我的意思是将它们转换为替代文件类型,然后在转换后将它们通过管道传输到另一个文件夹。
我已经查看了inotify
来监视目录,但无法判断您是否可以将其作为日常工作。
使用inotify
我让这段代码在示例脚本中工作:
#!/bin/bash
while read line
do
echo "close_write: $line"
done < <(inotifywait -mr -e close_write "/home/tmp/")
这确实会在添加新文件时通知,并且是即时的。
我正在考虑使用它并跟踪新文件,然后在一天结束时一次性处理它们。
我以前没有这样做过,所以我希望得到一些帮助。
也许inotify
以外的其他东西会更好。
谢谢!
您可以使用每日cron作业:http://linux.die.net/man/1/crontab<</p>
绝对应该考虑使用 cronjob。 编辑你的 cronfile 并将其放入:
0 0 * * * /path/to/script.sh
这意味着每天午夜运行脚本。 然后在您的script.sh
中,您要做的就是对所有文件,"将它们转换为替代文件类型,然后在转换后将它们通过管道传输到另一个文件夹"。
您的 cron 作业(请参阅此页面上的其他答案)应保留已处理文件的列表,然后使用 comm -3 processed-list all-list
获取新文件。曼通讯
它是更好的
选择 awk 'FNR==NR{a[$0];next}!($0 in a)' processed-list all-list
并且可能比使用find
更健壮,因为您记录了实际处理的内容。
要在一天结束时收集文件,只需使用 find:
find $DIR -daystart -mtime -1 -type f
然后,正如其他人指出的那样,设置一个 cron 作业来运行您的脚本。