你的任务是useless use of backticks。你只想要
ATTACH="/home/foo/attachments/camera"
但是,如果这是一个静态字符串,把它放在一个变量中并不真正给你买东西。
要实际提取主题,事\/
必须是一个正则表达式,你想要的主体部分进行匹配之后。
:0
* ^To:.*[email protected]\.com
* ^Subject:[ ]*\/[^ ].+
| munpack -s "$MATCH" -q -C "$ATTACH"
的\/
令牌之前的正则表达式[ ]*
跳过任何前导空格(括号内,你需要一个标签和一个空格,以匹配任何任何序列)。该[^ ]
匹配字段的第一个非空白字符(不占空间,而不是标签),然后我们捕捉行的其余部分与.+
还要注意适当的引用变量。一般情况下,除非你特别希望shell对该值执行whitespace tokenization and wildcard expansion,否则应该将变量放在双引号中。
我删除了c
标志:0
后,因为我猜你实际上并不需要的Procmail也做其他的事情与此消息(但这是投机性的,如果我错了,通过各种手段把它放回去)。
如果确实munpack
不支持-s
那么也许是这样的:
:0
* ^To:.*[email protected]\.com
* ^Subject:[ ]*\/[^ ].+
| extract "$ATTACH/$MATCH"
其中extract
是一个脚本像
#!/bin/sh
dest=$1
mkdir "$dest.tmp"
munpack -q -C "$dest.tmp"
set -- "$dest.tmp"/*
test -e "$1" || { rmkdir "$dest.tmp"; echo "$0: $dest: nothing extracted" >&2; exit 2;}
case $# in 1) mv "$1" "$dest"; rmdir "$dest.tmp"; exit 0;; esac
echo "$0: $dest.tmp contains multiple files; halp!"; exit 1
这提取到一个目录,那么如果该目录包含一个文件,将其移动到最终目的地。如果什么都没有提取,什么都不做。如果有多个提取的文件,请提出错误。
你肯定能管整个邮件到Python代替,但推功能集成到Python中似乎没有必要或有益的在这里。 (再一次,你可能会有另外的上下文以另一种方式提示这些尺度,但是我们对你的问题的了解还不够充分,从而得出这样的结论。)
我依稀推测'-s'不喜欢接收一个不带引号的冒号作为它的值,这就是你的代码所做的事情(如果传入的消息实际上在Subject头部包含一个冒号;如果不是,条件显然不匹配)。 – tripleee
我快速搜索的'munpack'手册页确实不支持'-s'选项,在这种情况下,您的问题变得更加复杂。 https://linux.die.net/man/1/munpack是否与您的版本一致? (哪个版本,在哪个操作系统上,您使用的是否会使用不同的实用程序可以接受?) – tripleee