关于bash:仅列出目录,包括名称中包含空格的目录?

List only directories, including directories with spaces in their names?

本问题已经有最佳答案,请猛点这里访问。

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

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

1
2
3
4
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"目录。

这是我试过的。

1
2
3
for d in"$(find data -maxdepth 1 -type d -print | sort -r)"; do
    echo $d
done

但这给了我这样的输出:

1
2
3
4
Wychavon
Wrecsam
-
Wrexham

我想要这样的输出:

1
2
Wychavon
Wrecsam - Wrexham

我能做什么?


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

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

相关:

  • 循环访问bash中的目录
  • 为什么不分析ls(1)的输出