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。
小智 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)