有没有正确的方法来列出当前目录的子目录?

Eri*_*son 13 command-line ls bash directory

我可以通过以下方式找到目录的子目录

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

或者

ls -l | grep "^d"
Run Code Online (Sandbox Code Playgroud)

但这两者似乎都是间接的,我想会有一种标准的方法来查找目录。有没有正确的方法来做到这一点?如果不是,这些中的任何一个都会导致边缘情况下的不良行为吗?(符号链接、隐藏目录等)

Cal*_*leb 19

答案将更多地取决于您打算对输出做什么,而不是您正在寻找什么。如果您只想在终端上查看用于视觉参考的列表,那么您的第一个解决方案实际上非常好。如果您想处理输出,您应该考虑使用另一种方法。

将列表输入另一个程序的最可靠方法之一是使用find.

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

这对提要有益的原因是find可以-print0使用-exec. 有关为什么这比解析 ls 的输出更好的参考,请参阅Greg Wiki 上的ParsingLS

  • 我必须输入 `find 。-maxdepth 1 -type d` 使其在 OS X Yosemite 上工作。 (4认同)
  • 要列出子目录,还必须指定 -mindepth ,如 `find 。-maxdepth 1 -mindepth 1 -type d`。否则,将包含当前目录 `.`。 (3认同)

小智 5

仅供参考-在ZSH(但不是BASH),你也可以这样做:ls -d -- *(/); (/)修饰符告诉ZSH只有水珠目录。

也就是说,它与您自己提出的解决方案 ( ls -d -- */) 并没有太大不同,而且与标准相差甚远。

至于输出ls(可能因其他标志而异):

% ls
dir0 dir1 dir2 file0 file1 file2
% ls -d -- */
dir0/ dir1/ dir2/
% ls -d -- *(/)
dir0 dir1 dir2
Run Code Online (Sandbox Code Playgroud)