我正在监控邮件文件中的新邮件。目标是为到达本地主机的每封新邮件创建一个新文件。
这是我目前所拥有的。
current="$(date +"%Y_%m_%d_%I_%M_%p").txt"
tail -f /var/spool/mail/root > $current
问题是没有为每封新邮件创建新文件。有什么建议吗?
答案1
您的邮件池包含 Berkeleymbox
格式。任何以五个字符From
(空格)开头的行都是开始新消息的分隔符。
shell 循环本身无法动态决定将内容重定向到何处,但是类似这样的操作应该可以工作:
tail -f "$MAIL" |
awk 'BEGIN { n=0; where="/dev/null" }
/^From / { close(where); where=sprintf("./message-%07s", ++n) }
{ print >>where }'
我们首先在消息中间开始读取的/dev/null
情况下写入。现在,每当我们看到新的消息分隔符时,我们都会更新和。最后一行打印指向每一行的所有内容。tail
n
where
where
需要说明的是,这不是处理邮件假脱机的好方法。首先,tail
调用之间的任何内容都将丢失;tail
如果某些东西截断了邮件假脱机文件,则无法应对。也许你应该看看 Procmail 或 Maildrop。