Nay*_*yed 4 linux command-line ls command
pwd
是我的主目录。ls */ -d
显示目录。
~$ ls */ -d
Blog/ Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ Templates/ Videos/
Run Code Online (Sandbox Code Playgroud)
并ls -a
显示所有隐藏的目录和文件。隐藏目录- .cache
,.local
等等。
$ ls -a
. .cache .gnupg .xsession-errors.old
.. .config .gtkrc-2.0 Templates
.bash_history Desktop .gtkrc-xfce Pictures .themes
.bash_logout .linuxmint .pki Videos
.bashrc Documents .local .profile .viminfo
Blog Downloads .mozilla Public .Xauthority
Music .ssh .xsession-errors
Run Code Online (Sandbox Code Playgroud)
但是当我运行时ls -ad */
,它不会显示任何隐藏目录。有人愿意解释吗?
$ ls -ad */
Blog/ Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ Templates/ Videos/
Run Code Online (Sandbox Code Playgroud)
Ste*_*itt 15
当您运行 时ls -a
,ls
命令行上没有文件名(如 所见ls
),因此它会自行确定应列出的文件名。由于-a
已指定,这包括显示“隐藏”文件。
当您运行ls -d */
and 时ls -ad */
,shell 会展开*/
,并提供ls
将显示的文件名列表。*
在文件名模式的开头不匹配.
,因此*/
不包含隐藏文件:与 结合使用-d
,-a
此处无效。
要查看隐藏目录,您可以明确列出它们:ls -d -- */ .*/
. 在某些 shell 中,您也可以要求*
匹配隐藏文件;例如在 Bash 中, with shopt -s dotglob
(注意.
和..
不包括在这种情况下,这使得它的行为更像ls -A
)。
另请注意--
,您忘记标记选项的结尾以确保文件名以-
. 另请注意,*/
包括目录和指向目录的符号链接。如果使用zsh
,您可以ls -d -- *(D/)
只列出目录(包括带有 的隐藏目录D
),而无需/
为每个文件添加尾随。或者,*(D-/)
如果您确实想要目录的符号链接。
cas*_*cas 14
*
故意不匹配隐藏文件或目录,因为大多数时候这正是我们想要的(因为点文件和目录通常用于配置,而不是数据),并且您可以通过显式指定以.
if开头的 glob 来覆盖默认值/当你需要的时候。
如果您希望它们与 glob 匹配,请使用ls -d .*
(或ls -d .*/
仅匹配没有常规文件的隐藏目录)。要匹配隐藏和非隐藏目录,请使用ls -d -- */ .*/
注意:正如@rexkogitans 在评论中提到的,在传递给程序之前*
,shell 会扩展类似的 glob 。 永远不会看到 a or (or ),它会看到作为 shell 扩展 glob 的结果的文件和/或目录名称列表。这就是为什么如果要将全局字符作为字符串文字传递给程序,则需要引用或转义(通过以反斜杠作为前缀)全局字符。ls
*
.*
.*/
另请注意:如果没有与 glob 匹配的文件/目录,则 glob 将按原样传递给程序,未扩展(ls
即将*
视为其参数)。 bash
(以及其他一些类似 bourne 的 shell)允许覆盖此行为 - 例如,在 bash 中,您可以使用nullglob
或failglob
shell 选项。nullglob 导致它被扩展为空(即它从参数列表中删除),而 failglob 触发一个错误。
归档时间: |
|
查看次数: |
948 次 |
最近记录: |