2014-02-05 83 views
0

我試圖循環通過一個目錄(非遞歸),我只想列出目錄名稱,而不是路徑。循環通過目錄和返回目錄名

find /dir/* -type d -prune -exec basename {} \; 

這將返回目錄中的目錄列表,它的工作原理。

folder 1 
this is folder2 

我想環路直通這些,所以我做:

for i in $(/dir/* -type d -prune -exec basename {} \;) 
do 
    echo ${i} 
done 

但for循環環路直通的每個單詞,而不是行。其結果如下:

folder 
1 
this 
is 
folder2 

我知道這裏有很多線程,但我還沒有找到任何人爲我工作。特別是名稱中的空格。
有誰知道如何解決這個問題?

回答

0

使用while循環,而不是:

find /dir/* -type d -prune -exec basename {} \; | while IFS= read -r line 
do 
    echo "$line" 
done 
+0

不錯,它似乎工作。我會與此合作。謝謝。 – Patrik

0

find /dir -maxdepth 1 -type d -printf %f

1

如果你想通過目錄名,那麼你可以使用循環;

(cd /dir && for f in */; do echo "$f"; done) 

如果要環通的查找結果只有更好的方式來做到這一點是:

while read -r f; do 
    echo "$f" 
done < <(find /dir/ -type d -prune -exec basename '{}' \;) 

這是首選,因爲它避免生成一個子shell(雖然find -exec將創建子shell )。