在shell脚本中,做什么。[!。] *是什么意思?

时间:2016-12-08 07:33:42

标签: bash gnu-coreutils

在当前目录中打印文件和文件夹列表的命令及其总大小为du -sh *。但是,该命令不会列出隐藏的文件或文件夹。我找到了一个命令解决方案,它可以正确地列出隐藏文件和文件夹以及其余文件:du -sh .[!.]* *。虽然它完美无缺,但解决方案按原样提供,没有任何解释。

.[!.]*的含义是什么?它是如何工作的?

3 个答案:

答案 0 :(得分:3)

. - 匹配隐藏文件的.前缀

[!.] - 匹配任何字符,只要它不是.see ref

* - 任意数量的字符

因此,此模式表示匹配文件以.开头,但不是..

答案 1 :(得分:3)

它是一个通配模式,它基本上告诉bash找到所有以.开头的文件,后跟任何字符,但后跟.并包含任何字符。

有关bash globbing模式的详细解释,请参阅this page

答案 2 :(得分:1)

.[!.]*含义是以.开头但不跟随.的任何文件或目录名称,因此它将包括当前目录下的所有隐藏文件和目录,但不包括父目录。

因为这种行为是由shell glob模式决定的。因此,您可以使用ls .[!.]*查看shell环境中的实际内容。

顺便说一句,您可以在shell中启用dotglob以简化du命令。

$ shopt -s dotglob
$ du -sh *
$ shopt -u dotglob

来自bash手册

  

dotglob 如果设置,bash包含以“。”开头的文件名。在路径名扩展的结果中。