Bash 仅列出目录,包括名称中带有空格的目录?

Bash 仅列出目录,包括名称中带有空格的目录?,bash,Bash,我想列出一个目录中的所有目录。其中一些名字中有空格。目标目录中还有一些文件,我想忽略它们 以下是ls-lah data/的输出: drwxr-xr-x 5 me staff 160B 24 Sep 11:30 Wrecsam - Wrexham -rw-r--r-- 1 me staff 77M 24 Sep 11:31 Wrexham.csv drwxr-xr-x 5 me staff 160B 24 Sep 11:32 Wychavon -rw-r--r

我想列出一个目录中的所有目录。其中一些名字中有空格。目标目录中还有一些文件,我想忽略它们

以下是
ls-lah data/
的输出:

drwxr-xr-x    5 me  staff   160B 24 Sep 11:30 Wrecsam - Wrexham
-rw-r--r--    1 me  staff    77M 24 Sep 11:31 Wrexham.csv
drwxr-xr-x    5 me  staff   160B 24 Sep 11:32 Wychavon
-rw-r--r--    1 me  staff    84M 24 Sep 11:33 Wychavon.csv
我只想迭代“Wrecsam-Wrexham”和“Wychavon”目录

这就是我尝试过的

for d in "$(find data -maxdepth 1 -type d -print | sort -r)"; do
    echo $d
done
但这给了我这样的输出:

Wychavon
Wrecsam
-
Wrexham
Wychavon
Wrecsam - Wrexham
我想要这样的输出:

Wychavon
Wrecsam
-
Wrexham
Wychavon
Wrecsam - Wrexham

我能做什么?

您的for循环没有做正确的事情,因为。您可以使用glob,而不必在子shell中调用外部命令:

shopt -s nullglob # make glob expand to nothing if there are no matches
for dir in data/*/; do
  echo dir="$dir"
done

相关的:


@MatBailie不,它只是没有下降到命令行上指定的目录中。您误解了
ls f d
列出了
f
d
的内容,而
ls-d f d
只是列出了
f
d
。谢谢!这是可行的,但(只是为了让人恼火)我也想以相反的顺序列出目录-有没有一种简单的方法可以做到这一点?您可以使用
dir\u array=(data/*/)
将目录名抓取到一个数组中,然后按照本文中提到的步骤对数组进行排序:。