如何使用 bash 命令列出文件夹?

Spi*_*Xel 54 linux command-line ls

有没有办法使用 bash 命令仅列出目录中的文件夹?(因为该ls命令列出了所有文件和文件夹)

Gaf*_*aff 70

您可以使用:

ls -d -- */
Run Code Online (Sandbox Code Playgroud)

由于所有目录都以 结尾/,因此仅列出当前路径中的目录。该-d选项确保只有目录名称都印,而不是它们的内容。

  • @Louis,`--` 通常用于标记选项的结尾,因此如果文件名为 `-l` ls 不会将其解释为长列表格式选项。 (7认同)
  • @8088 `ls -d -- */` 和 `ls -d */` 有什么区别? (4认同)
  • ls -- */ 列出所有目录及其内容 (2认同)

dan*_*ann 29

斯蒂芬马丁的回应发出了警告,并列出了当前文件夹,所以我建议

find . -mindepth 1 -maxdepth 1 -type d
Run Code Online (Sandbox Code Playgroud)

(这是在 Linux 上;我在查找的 POSIX 手册页中找不到 -maxdepth 和 -mindepth)

  • 我知道较旧的问题。虽然我最初也会为这个任务寻找 find,但我喜欢 `ls -d -- */` 选项,因为 `find` 也会找到隐藏的目录。这有时很有用,但有时也会引起麻烦。我希望这个评论可以帮助其他人。+1 (2认同)

squ*_*org 13

find . -maxdepth 1 -type d
Run Code Online (Sandbox Code Playgroud)

将只列出文件夹。正如 Teddy 指出的,你需要 -maxdepth 来阻止它递归到子目录中

  • 你可能也想要`-maxdepth 1`。 (5认同)

Mat*_*ens 6

丹尼尔的回答是正确的。不过,这里有一些有用的补充。

为避免列出隐藏文件夹(如.git),请尝试以下操作:

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \)
Run Code Online (Sandbox Code Playgroud)

并在某些环境中替换输出开头的可怕点斜线find,请使用:

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \) | sed 's|^\./||g'
Run Code Online (Sandbox Code Playgroud)