循环到目录并返回目录名称

时间:2014-02-05 11:53:19

标签: bash

我试图通过一个目录循环(非递归),我只想列出目录名,而不是路径。

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

我知道这有很多线索,但我找不到任何适合我的人。特别是名称中有空格。
有谁知道如何解决这个问题?

3 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

改为使用while循环:

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