2013-07-14 45 views
4

我正在编写一个通过设置IMAP文件夹迭代的shell脚本。使用BASH在文件夹名称中搜索包含空格的子文件夹

考虑:

WORKPATH=/var/mail/mydomain.com/myaccount/ 

我想列出内的所有子文件夹。

易与发现:

for SUB_FOLDER in $(find "$WORKPATH" -type d) 
do 
    echo "SUB_FOLDER: $SUB_FOLDER" 
done 

然而:一些文件夹有自己的名字空间,例如:

/var/mail/mydomain.com/myaccount/.Deleted Mails/ 
/var/mail/mydomain.com/myaccount/.Junk Mails/ 

这使上述打​​印出来的东西代码在附近:

SUB_FOLDER: /var/mail/mydomain.com/myaccount/.Deleted 
SUB_FOLDER: Mails/ 
SUB_FOLDER: /var/mail/mydomain.com/myaccount/.Junk 
SUB_FOLDER: Mails/ 

我已经尝试使用-print0选项和管道到xargs -0,但我没有运气。玩IFS比输出更糟糕的东西输出。

真的可以使用一个提示如何使找到只有2令牌的for循环instad of 4,或迭代列表的替代方法。

回答

6

使用while循环:

while read SUB_FOLDER; do 
    echo "SUB_FOLDER: $SUB_FOLDER"; 
done < <(find "$WORKPATH" -type d) 
+0

谢谢!我正在努力调试正在发生的事情。 我的系统上的语法与您的示例相比略有不同。我用“$”替换了最后一个“<”,这使得我的脚本更像我想要的那样行事。 –

+0

呃......忽略替换“<”部分。原来我在脚本中使用/ bin/sh而不是/ bin/bash。那里的行为有些微妙的差异。使用bash使更多的错误消失。 :-) –

相关问题