是否有理由在文件名扩展中使用多个问号而不是星号?

Azo*_*im- 4 wildcards

如果我有多个目录,例如命名为10001through10025是否有任何理由使用ls 1*/foovs. ls 100??/foo

我有超过 25 个,所以我很好奇速度上是否有任何差异。

我知道两者在使用上的区别,星号会匹配更长的文件名,比如10001.backup. 但是假设我没有任何不符合我的约定的文件。是否有任何幕后差异?

Spa*_*awk 9

功能

它们的意思不同。该星号匹配零到无穷大的字符。该问号与一个字符匹配。

从上面的参考:

* 字符用作通配符中文件名扩展的“通配符”。

这 ?字符用作通配符中文件名扩展的单字符“通配符”......

表现

tl; dr:性能上没有可检测到的差异。

我通过使用一个包含 36 个子目录的目录来测试性能,每个子目录都用一个字符命名。合并后的子目录中大约有 70 000 个文件。我测试了以下内容。

$ time ls ?/* -d >/dev/null
$ time ls */* -d >/dev/null
Run Code Online (Sandbox Code Playgroud)

我每个命令交替执行十次。这是real时间的结果,以秒为单位。

?       *
0.318   0.326
0.355   0.212
0.291   0.351
0.291   0.265
0.287   0.283
0.362   0.23
0.248   0.33
0.286   0.283
0.293   0.351
0.233   0.352
Run Code Online (Sandbox Code Playgroud)

经过统计分析(配对 t 检验,双尾),我无法检测到两个值之间的性能差异(p 值 = 0.95)。

图形

编辑:更多样本

我用 200 个样本重复了上述分析,再次交替测试。

$ for i in {1..200}; do time (ls */* -d >/dev/null) 2>> /tmp/time_asterisk; time (ls ?/* -d >/dev/null) 2>> /tmp/time_question_mark; done
Run Code Online (Sandbox Code Playgroud)

这是原始数据*。同样,我无法检测到显着差异(p 值 = 0.55),并且每个测试的分布看起来更相似。

图2