用于提取具有特定文件名的邮件附件的shell脚本

用于提取具有特定文件名的邮件附件的shell脚本,shell,attachment,mbox,Shell,Attachment,Mbox,我正在编写一个shell脚本来从mbox文件中提取邮件附件 目前我使用这个命令:cat mboxfile | formail-des munpack-qf 但我想在文件名中嵌入发件人电子邮件地址,类似于: user@host_filename.extension 你能给我推荐一些工具吗?为什么不在mbox库中使用脚本语言呢?e、 Perl及其模块。使用现成的库可能会让你省去很多痛苦。解决: cat $MBOX|formail -des ../dumpFile.sh # split the mb

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

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

但我想在文件名中嵌入发件人电子邮件地址,类似于:

user@host_filename.extension


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

为什么不在mbox库中使用脚本语言呢?e、 Perl及其模块。使用现成的库可能会让你省去很多痛苦。

解决:

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

extractFrom.sh是一个awk脚本,用于获取电子邮件地址,而不是使用您也可以使用的格式邮件 使用awk保存mbox文件的所有附件的munpack:

awk 'BEGIN {RS="\r\n";} /^From / { cmd="munpack";  print mail | cmd ;close(cmd) ;mail ="";} {mail = mail $0 "\n";}'
如果您将cmd更改为munpack-C,则返回您的目的地

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

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

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

我建议学习更强大的脚本语言。不必是Perl——也许是Ruby/Python等。?但我很感激现在这对你没有帮助。
 find . -type f -not -name "your_specific_file" -maxdepth 1 -exec rm {}