0

我将 Zarafa 用作 XMail 服务器的组件(仅用于测试目的)。要将邮件导入 Zarafa 系统,需要使用名为“zarafa-dagent”的二进制文件对其进行解析。

文件夹结构是:/var/MailRoot/domains/xxxxx.xxx/$user/Maildir/ 这些文件夹有子目录tmpnewcur

我的问题是我无法让脚本在 10 或 12 中解析所有电子邮件$userdirs

这是我当前的脚本:

userlist=`ls /var/MailRoot/domains/xxx.xx/`
filelist="/var/MailRoot/domains/xxx.xx/$userlist/Maildir/new/*"

for user in $userlist;
  do
   cd "/var/MailRoot/domains/xxx.xx/"$user"/Maildir/new/";
   "/usr/bin/zarafa-dagent $user -f *"
done

该脚本输出一条关于找不到要解析的文件的消息。

zarafa-dagent 二进制文件需要 2 个参数:1 个用户名,-f file_to_parse

4

3 回答 3

1

试试看:

userlist=/var/MailRoot/domains/xxx.xx/*
#filelist=/var/MailRoot/domains/xxx.xx/$userlist/Maildir/new/*

for user in $userlist; do
   cd ${userlist%/*}
   /usr/bin/zarafa-dagent ${userlist##*/} -f *
done

${userlist%/*}等等是参数扩展bash

一些建议

  • filelist变量从未在您的脚本中使用
  • 不解析ls输出
  • 阅读有关正确引用的信息
  • 受引号保护的 glob 不会被插值
于 2012-10-16T19:30:42.977 回答
1

一方面,您在包含对zarafa-dagent;的调用的行周围有引号。我很惊讶它正在被执行。

定义的行filelist是错误的,但未使用。

看起来zarafa-dagent需要一个包含电子邮件的文件,而不是目录列表。当 shell 扩展该命令时,它将扩展为/usr/bin/zarafa-dagent someuser -f tmp new cur. 但它只期望一个参数,并且它可能期望它是一个文件,而不是一个目录,基于文档

于 2012-10-16T19:32:03.503 回答
0

我能看到的唯一错误是调用zarafa-dagent. 删除行周围的引号,这应该至少修复一个错误:

/usr/bin/zarafa-dagent $user -f *

with 的行filelist也是错误的,但没关系,因为它从未使用过。

编辑:当它只处理一封电子邮件时,您必须按照@Brian 的建议遍历所有文件:

for mail in *; do
    /usr/bin/zarafa-dagent $user -f $mail
done
于 2012-10-16T19:28:55.957 回答