2011-02-11 111 views
1

在Peter Seebach的「Beginning Portable Shell Scripting」一書中,列舉了當前目錄中所有子目錄的內容:列出當前目錄的所有子目錄的內容 - 解析ls與globbing

#!/bin/sh 
/bin/ls | while read file 
do 
    if test -d "$file"; then 
    (cd "$file" && ls) 
    fi 
done 

我得知解析ls不好,應該首選globbing。您是否認爲作者選擇解析是因爲存在可移植性問題?

我會做:

#!/bin/sh 
for file in * 
do 
if test -d "$file"; then 
    (cd "$file" && ls) 
fi 
done 

感謝,

有人

回答

3

這兩種解決方案都沒有對怪異的文件名健壯,也不處理與開始目錄 「」。我會寫這樣使用find,例如:

find . -maxdepth 1 -type d -exec ls '{}' ';'

,但首先我會問什麼是真正需要的輸出,無論是一個人眼球或進一步的腳本來消化。

您可能可以在單個「查找」中完成for/while ... do ... done循環中的許多進程分支。

+0

不能升超過一次。 – 2011-02-11 15:07:00

+0

你可能想用'+'代替`';'`。另外,`-maxdepth`特定於GNU查找。 – 2011-02-11 15:31:00

相關問題