2013-07-14 48 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使更多的錯誤消失。 :-) –

相關問題