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

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

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

ls -d -- */

或者

ls -l | grep "^d"

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

答案1

答案将更多地取决于你的意图做与输出而不是您正在寻找的内容。如果您只想在终端上查看列表以供视觉参考,那么您的第一个解决方案实际上非常不错。如果您想处理输出,您应该考虑使用其他方法。

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

find -maxdepth 1 -type d

这对提要有好处的原因是,find可以使用 输出由空值分隔的数据-print0,或者使用 正确转义字符串作为另一个程序的参数-exec。有关为什么这比解析 ls 的输出更好的参考,请参阅解析LS在格雷格的维基百科上。

答案2

仅供参考 - 在 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

相关内容