使用BASH搜索包含空格的文件夹中的子文件夹

4

我正在编写一个脚本,用于遍历一组IMAP文件夹。

给定:

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

我可以帮您进行翻译。以下是内容的汉语翻译:

我想列出所有子文件夹。

使用find命令很简单:

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进行调整会对输出产生更多不必要的影响。
我真的需要一个提示,如何使find仅生成2个标记以用于for循环,而不是4个,或者使用其他方法来迭代列表。
1个回答

6

使用 while 循环:

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

谢谢!我已经疯狂地尝试调试一下是怎么回事。我的系统语法与您的示例略有不同。我将最后一个“<”替换为“$”,这使得我的脚本表现得更符合我的期望。 - Lasse Michael Mølgaard
嗯...忽略替换"<"部分。事实证明我在脚本中使用的是/bin/sh而不是/bin/bash。那里有一些微妙的行为差异。使用bash可以使更多的bug消失。 :-) - Lasse Michael Mølgaard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接