.??* 在 shell 命令中是什么意思?

.??* 在 shell 命令中是什么意思?

下列的命令将tar所有“点”文件和文件夹:

tar -zcvf dotfiles.tar.gz .??*

我熟悉常用表达,但我不明白如何解释.??*。我执行ls .??*tree .??*查看了列出的文件。为什么此正则表达式包含以.example 开头的文件夹中的所有文件?

答案1

通配符不是正则表达式。一般来说,shell 会尝试将您在命令行上键入的任何未引用为 glob 的内容解释为该内容。 Shell 根本不需要支持正则表达式(尽管实际上许多更高级的现代 shell 都支持正则表达式,例如构造=~中的正则表达式匹配运算符bash [[)。

.??*是一个球体。它匹配以文字点 开头.、后跟任意两个(不一定相同)字符 、??、后跟等价的正则表达式 的文件名[^/]*,即 0 个或多个不是 的字符/

有关 shell 路径名扩展(“globbing”的全名)的完整详细信息,请参阅POSIX 规范

答案2

通配符.??*(不是正则表达式(尽管看起来是这样)会转换为以句点 ( .) 开头、后跟两个单个字符 ( ??) 和任意数量(零个或多个)其他字符 ( *) 的文件名。

也许这个页面上文件名中的通配符会有帮助的。

答案3

要添加到其他答案,单个?将转换为单个字符文件名,并将??匹配仅包含两个字符的文件名,依此类推。

[root@mercy testdir_2]# ls
ion  it  r
[root@mercy  testdir_2]# ls ?
r
[root@mercy  testdir_2]# ls ??
it
[root@mercy 1 testdir_2]# ls ???
ion
[root@mercy  testdir_2]#

相关内容