为什么ls .*
打印出隐藏目录的内容?我只想打印隐藏文件,现在看到了 仅显示隐藏文件是一个解决方案,但我仍然想了解为什么显示目录的内容。进一步嵌套目录的内容不会显示。
ls .*
以下是我的主目录中的部分输出。
.bash_history
.bash_profile
.bashrc
.coin_history
.emacs
.gitconfig
.gitignore_global
.grasp_jss
.ssh:
config github_rsa.pub id_rsa.pub known_hosts.old
github_rsa id_rsa known_hosts lambda.pem
.vim:
colors ftdetect syntax
这台机器正在运行 RHEL。在 Mac OSX 上观察到类似的行为。
答案1
简短的回答:shell 全局扩展。
shell 接受您的输入并.*
在将其传递给 之前展开该部分ls
,因此您实际上正在执行以下操作:
$ ls .bash_history .bash_profile .bashrc .coin_history .emacs ...
所以它列出了每个条目。当它看到目录条目时,它会列出该目录的内容,就像您期望ls
的那样。要仅查看工作目录中的文件/目录,请使用-d
以下选项ls
:
$ ls -d .*
该-d
选项告诉ls
“列出目录本身,而不是它们的内容”(取自ls
手册页)。
答案2
为什么
ls .*
打印出隐藏目录的内容?
当ls
给定一个目录时,它会打印该目录的内容(默认情况下,不包括该目录中的隐藏文件)。通过ls .*
,shell 给出了ls
以 开头的文件和目录列表.
您可以使用set -x
来查看 shell 调用的命令(即,在扩展 shell glob 之后)。
答案3
当你这样做时
$ ls directory
您将获得 的列表directory
。如果directory
是目录,则将列出其内容,否则将与其他文件一样列出。
当你这样做时
$ ls dir*
您将得到所有匹配的内容的列表dir*
。如果其中任何一个是目录,您将看到这些目录的内容。
当你这样做时
$ ls .*
您将获得与上一个示例相同的效果,只是模式不同,并且由于您显式匹配隐藏文件和文件夹,因此这些(匹配的文件和文件夹)将被 考虑ls
。
如果您不想查看文件夹的内容(隐藏或不隐藏),请使用ls
其标志。-d
它会停止ls
递归到任何与您给定的模式匹配的找到的文件夹。
答案4
因为你具体地告诉它。如果 shell glob 扩展部分对您来说是显而易见的,我想您真正需要的答案是考虑到您的问题背后的困惑。
您将给 ls 提供的内容与 ls 给您提供的内容混淆了。虽然 ls 不会给你隐藏的目录/文件,但你可以给它列出隐藏的目录/文件。您是通过.*
专门使用来完成的(重点是.
not on *
)。