循环邮件文件中的每条消息
Loop for each message in mail file
我的邮件存储在 /var/mail/ 文件中。
我想编写一个 bash 脚本,它将循环处理每条消息。
我不知道如何从文件中拆分消息。
谢谢
编辑:"When all you have is an hammer, everything looks like a nail"的典型案例;按照 twalberg.
的建议从 procmail 邮件处理包中检查 formail
对于一些快速而肮脏的事情,您应该能够使用以下方法将记录与 NUL 字节分开,这将使对它们的迭代更容易:
sed '/^\n/N;s/^From/\x0&/' /var/mail/targetMailbox
例如,您可以使用此命令和 split
将您的邮箱拆分为多个大小可管理的文件:
sed '/^\n/N;s/^From/\x0&/' /var/mail/targetMailbox | split -l 100 -t'[=11=]' - /tmp/mailbox
此命令会将邮箱拆分为 100 条消息的块,这些消息将写入 /tmp/
中它们自己的文件;如果您对分割文件感兴趣,请查看 split
的选项,它支持多种不同的分割方式。
许多(最近的?)GNU 工具将有一个 -0
或 -z
选项来使它们处理 NUL
分隔的记录,例如:
-z
对于 grep
、head
和 tail
-0
对于 xargs
要直接从 bash
迭代它们,最简单的方法是使用带有 read
的 -d
选项的 while read
循环来指定使用 NUL 作为分隔符。
要获得更持久的解决方案,您需要了解如何使用现有的 mbox
解析器。
我的邮件存储在 /var/mail/ 文件中。
我想编写一个 bash 脚本,它将循环处理每条消息。 我不知道如何从文件中拆分消息。
谢谢
编辑:"When all you have is an hammer, everything looks like a nail"的典型案例;按照 twalberg.
的建议从 procmail 邮件处理包中检查formail
对于一些快速而肮脏的事情,您应该能够使用以下方法将记录与 NUL 字节分开,这将使对它们的迭代更容易:
sed '/^\n/N;s/^From/\x0&/' /var/mail/targetMailbox
例如,您可以使用此命令和 split
将您的邮箱拆分为多个大小可管理的文件:
sed '/^\n/N;s/^From/\x0&/' /var/mail/targetMailbox | split -l 100 -t'[=11=]' - /tmp/mailbox
此命令会将邮箱拆分为 100 条消息的块,这些消息将写入 /tmp/
中它们自己的文件;如果您对分割文件感兴趣,请查看 split
的选项,它支持多种不同的分割方式。
许多(最近的?)GNU 工具将有一个 -0
或 -z
选项来使它们处理 NUL
分隔的记录,例如:
-z
对于grep
、head
和tail
-0
对于xargs
要直接从 bash
迭代它们,最简单的方法是使用带有 read
的 -d
选项的 while read
循环来指定使用 NUL 作为分隔符。
要获得更持久的解决方案,您需要了解如何使用现有的 mbox
解析器。