![有没有正确的方法来列出当前目录的子目录?](https://linux22.com/image/2601/%E6%9C%89%E6%B2%A1%E6%9C%89%E6%AD%A3%E7%A1%AE%E7%9A%84%E6%96%B9%E6%B3%95%E6%9D%A5%E5%88%97%E5%87%BA%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E7%9A%84%E5%AD%90%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我可以通过以下方式找到目录的子目录
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