0

XMail Server で Zarafa をグループウェア (テスト目的のみ) として使用しています。メールを Zarafa システムにインポートするには、"zarafa-dagent" と呼ばれるバイナリで解析する必要があります。

フォルダー構造は次のとおりです。/var/MailRoot/domains/xxxxx.xxx/$user/Maildir/ これらのフォルダーには、サブディレクトリtmpnewおよびがありcurます。

私の問題は、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出力を解析しない
  • 適切な引用について読む
  • 引用符で保護されたグロブは補間されません
于 2012-10-16T19:30:42.977 に答える
1

1 つには、への呼び出しを含む行を引用符で囲んでいますzarafa-dagent。私はそれがまったく実行されていることに驚いています。

定義する行filelistが間違っていますが、使用されていません。

zarafa-dagentディレクトリのリストではなく、電子メールを含むファイルが必要なようです。シェルがそのコマンドを展開すると、に展開され/usr/bin/zarafa-dagent someuser -f tmp new curます。しかし、それは 1 つの引数のみを想定しており、ドキュメンテーションに基づいて、ディレクトリではなくファイルであると想定している可能性があります。

于 2012-10-16T19:32:03.503 に答える
0

私が見ることができる唯一のエラーは、への呼び出しzarafa-dagentです。行の周りの引用符を削除すると、少なくとも 1 つのエラーが修正されます。

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

の行filelistも間違っていますが、使用されることはないので問題ありません。

編集: 1つの電子メールのみを処理する場合、@Brianがすでに提案したように、すべてのファイルをループする必要があります:

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