用于提取特定文件名的电子邮件附件的shell脚本

时间:2010-02-27 17:45:48

标签: shell attachment mbox

我正在编写一个shell脚本来从mbox文件中提取邮件附件

目前我使用此命令:cat mboxfile | formail -des munpack -qf

但我想将发件人电子邮件地址嵌入文件名中,例如:

user@host_filename.extension

你能给我推荐一些工具吗?

3 个答案:

答案 0 :(得分:1)

为什么不使用带有mbox库的脚本语言?例如Perl和Mail::MBox模块。使用现成的库可能会为您带来很多悲伤。

答案 1 :(得分:1)

解决:

cat $MBOX|formail -des ../dumpFile.sh  # split the mbox in many messages

for mail in *  # cycle on every message
do
 echo ===========================
 FROM=$(../extractFrom.sh $mail |tr -d "<"|tr -d ">"|tr -d "/" |sed 's/@/-AT-/'|tr "." "-"|sort|uniq) # get address
 for file in $(munpack $mail |cut -f1 -d" "|tr -s "_" "-")  # extract attachments and prepend address
 do
  echo ln $file utente:${FROM}_tipo:$file # whatever
 done
done

其中dumpFile.sh只是:

cat >$(mktemp -p .)

和extractFrom.sh是一个获取电子邮件地址的awk脚本

答案 2 :(得分:0)

除了使用formail之外,您还可以使用 带有awk的munpack可以保存mbox文件的所有附件:

awk 'BEGIN {RS="\r\n";} /^From / { cmd="munpack";  print mail | cmd ;close(cmd) ;mail ="";} {mail = mail $0 "\n";}'

如果将cmd更改为munpack -C your_destination_dir

之后,在保存附件的目录中运行此命令:

 find . -type f -not -name "your_specific_file" -maxdepth 1 -exec rm {}

这将删除目录中与您的特定请求不匹配的所有文件