【问题标题】:List only directories, including directories with spaces in their names? [duplicate]仅列出目录,包括名称中带有空格的目录? [复制]
【发布时间】:2019-03-19 05:27:28
【问题描述】:

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

这是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

我能做什么?

【问题讨论】:

  • @MatBailie 不,它只是不会进入命令行上指定的目录。
  • 你误会了。 ls f d 列出了fd内容,而ls -d f d 只列出了fd

标签: bash


【解决方案1】:

由于word splitting,您的 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

相关:

【讨论】:

  • 谢谢!这行得通,但是(只是烦人)我还想以相反的顺序列出目录 - 有没有一种简单的方法可以做到这一点?
  • 您可以使用dir_array=(data/*/) 将目录名称抓取到一个数组中,然后按照本文中提到的步骤对数组进行排序:How to sort an array in Bash
猜你喜欢
  • 1970-01-01
  • 2012-08-15
  • 2019-04-02
  • 2016-02-27
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2018-12-20
  • 2019-04-10
相关资源
最近更新 更多