我在获取一个设置为名称中带有空格的路径以正确运行的变量时遇到了麻烦。
在maildrop
我希望所有不符合规则的邮件(在本例中仅为“保留”)移动到存档文件夹“1.存档”。
这是我的邮件过滤器配置。
## FILING RULES for "$HOME/Maildir/.1 Archiver.Filer"
#### Hold
if (/^From:.*test\@gmail\.com*/:h || \
/^Subject:.*Archive Filer Test.*/:h)
{
TESTDIR="$HOME/Maildir/.Test"
exception {
# File mail in test folder
cc "$DEALSDIR"
# Mark mails in the folder as read
`for x in ${TESTDIR}/new/*; do [ -f $x ] && mv $x ${TESTDIR}/cur/${x##*/}:2,S; done`
`for x in ${TESTDIR}/cur/*:2,; do [ -f $x ] && mv $x ${TESTSDIR}/cur/${x##*/}S; done`
to "/dev/null"
}
}
#### Archive everything else
if (/^From:.*/:h)
{
ARCHIVEDDIR="$HOME/Maildir/.1 Archive"
exception {
cc "$ARCHIVEDDIR"
`for x in ${ARCHIVEDDIR}/new/*; do [ -f $x ] && mv $x ${ARCHIVEDDIR}/cur/${x##*/}:2,S; done`
`for x in ${ARCHIVEDDIR}/cur/*:2,; do [ -f $x ] && mv $x ${ARCHIVEDDIR}/cur/${x##*/}S; done`
to "/dev/null"
}
}
问题是“#### 归档其他所有内容”部分。我尝试(a)将变量放在引号中并(b)$HOME/Maildir/.1\ Archive/
在标记为已读部分中使用,但结果保持不变(也许我错过了一些东西):
- 邮件移动到存档文件夹中 √</li>
- 它没有被标记为已读……
如果我将名称与空格切换为没有空格的名称,则它可以工作。
旁注:此邮件过滤器不在收件箱上运行。最初的计划是自动归档我移入“1.存档”的任何内容,如果没有规则将其保存在存档文件夹中。
由于我无法提出一个忽略已匹配文件的 bash 脚本,因此我创建了一个单独的 imap 文件夹用于归档(“filer”目录)。我使用这个 bash 脚本将归档的内容通过管道传输到我的邮件投递过滤器:
#!/bin/bash
cd /home/pattulus/Maildir/.1\ Archive.Filer/cur/;
if ls ./* > /dev/null 2>&1
then
echo "There are files in that directory!"
echo "Filing archived Mails…"
for MAILFILE in * ;
do maildrop /home/pattulus/.mailfilter-archive < $MAILFILE && rm -f $MAILFILE ;
done
echo "-----------"
echo "All Mails filed."
else
echo "There are no files in that directory"
fi