Answers:
答案将更多地取决于您打算对输出执行的操作,而不是所需的内容。如果您只想在终端上看到一个可供视觉参考的列表,那么您的第一个解决方案实际上非常不错。如果要处理输出,则应考虑使用另一种方法。
使列表馈入另一个程序的最可靠的方法之一就是使用find
。
find -maxdepth 1 -type d
之所以对feed有用,是因为它find
可以使用-print0
或以适当的转义字符串的形式输出用null分隔的数据作为使用的另一个程序的参数-exec
。有关为什么这比解析ls的输出更好的参考,请参阅Greg Wiki上的ParsingLS。
find . -maxdepth 1 -mindepth 1 -type d
。否则,.
将包括当前目录。
仅供参考-在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
*(/)
会扩展到非隐藏目录,而*/
扩展到非隐藏目录或目录的符号链接(或至少指向我们可以识别为目录的路径的符号链接)。
find . -maxdepth 1 -type d
才能使其在OS X Yosemite上工作。