我试图通过一个目录循环(非递归),我只想列出目录名,而不是路径。
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 :(得分: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