解析子目录中的文件

时间:2012-10-16 19:13:39

标签: bash sh

我使用Zarafa作为组件(仅用于测试目的)与XMail Server。 要将邮件导入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

3 个答案:

答案 0 :(得分: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输出
  • 了解正确引用
  • 由引号保护的globs不是插值的

答案 1 :(得分:1)

首先,您在包含对zarafa-dagent的调用的行周围有引号;我很惊讶它被处决了。

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

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

答案 2 :(得分:0)

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

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

filelist行也是错误的,但无关紧要,因为它从未使用过。

编辑:当它仅处理一封电子邮件时,您必须循环浏览@Brian已建议的所有文件:

for mail in *; do
    /usr/bin/zarafa-dagent $user -f $mail
done