有时,我只需要检查目录而不是文件。命令ls有什么选择吗?还是有任何实用程序可以做到这一点?
编辑:我正在使用Mac OS X,即使我有目录,也ls -d
给我.
。
ls
默认为.
。并且-d
意味着不打印目录的内容,而是打印目录本身。
ls -p
它/
后会显示目录名称。因此*/
,只是一种与目录名称和/
组合匹配的模式。
有时,我只需要检查目录而不是文件。命令ls有什么选择吗?还是有任何实用程序可以做到这一点?
编辑:我正在使用Mac OS X,即使我有目录,也ls -d
给我.
。
ls
默认为.
。并且-d
意味着不打印目录的内容,而是打印目录本身。
ls -p
它/
后会显示目录名称。因此*/
,只是一种与目录名称和/
组合匹配的模式。
Answers:
我知道已经有一个选定的答案,但是您可以通过以下方式获得所要求的行为ls
:
ls -ld -- */
(请注意,“-”标记参数的末尾,以防止将以连字符开头的文件夹名称解释为其他命令选项。)
这将在运行它的当前工作目录中列出所有非隐藏的(除非您配置外壳程序的glob来扩展它们)目录(请注意,它还包括指向目录的符号链接)。要获取其他文件夹的所有子目录,请尝试:
ls -ld /path/to/directory/*/
请注意,-l是可选的。
/
的末尾有一个隐式-但是现在我看到您的回答是有意义的。毕竟,制表符补全总是添加它。
-d for dir, -l for long format
。目的是--
什么?
find
在这种情况下,实际上是一个不错的选择。
find
当目录数超过最大参数长度时,它也具有优势。
ls -alhF --ignore=*.*
。不知道这将如何处理“隐藏”文件夹,即.myHiddenFolder
使用zsh
(在macOS上默认发现,它甚至曾经存在于/bin/sh
其中),您将使用glob限定符根据文件的类型选择文件:
列出非隐藏目录:
ls -d -- *(/)
列出所有目录:
ls -d -- *(D/)
(.
并且..
始终被排除,如果需要,可以分别添加)
还包括指向目录的符号链接:
ls -d -- *(D-/)
(-
因此,在符号链接解析后可以应用更多限定词)。
我认为ls在Mac OS X上存在错误。一种解决方法是使用grep ... ls -l / | grep "^d"
grep "^d"
黑客的人
ls -l /home
和ls -dl /home
ls -l / | grep ^d
。如果你正在打算使用引号,因为你并不需要参数扩展,使他们的单引号。 ls -l / | grep '^d'
。是的,我是一个学徒。但确实如此。:)
最简单的方法是键入以下命令。这适用于大多数UNIX和Linux平台和版本。您可以-F
根据需要跳过/ ,但这是在目录名末尾添加/的参数。该-C
参数仅捕获目录名称-它们都在当前目录中。如果只想在当前路径中看到目录和子目录,只需添加-R
参数(ls -CFR
)。
# ls -CF
/dir1 /dir2 /dir3 /beaches /Work /Other
ls
我知道的所有实现中,在POSIX规范中ls
,-C
都是以column为输出,而不是跳过非目录文件。在您的示例中,在/
文件名之前打印,这是任何ls
实现都不会执行的。使用-F
,将/
被附加到目录文件的文件名中。
ls -d
只给出.
以及为什么*/
必须添加到末尾才能使其起作用吗?