Wildcards

是否有理由在文件名擴展中使用多個問號而不是星號?

  • August 18, 2015

如果我有多個目錄,例如10001通過命名,10025是否有任何理由使用ls 1*/foovs. ls 100??/foo

我有超過 25 個,所以我主要好奇速度上是否有任何差異。

我知道兩者在使用上的區別,星號將匹配更長的文件名,比如10001.backup. 但是假設我沒有任何不符合我的約定的文件。有沒有幕後的區別?

功能

他們的意思不同。星匹配零到無窮大的字元。問號與一個字元完全匹配。

從上面的參考資料:

  • 字元用作萬用字元中文件名擴展的“萬用字元”。

這 ?字元用作萬用字元中文件名擴展的單字元“萬用字元”……

表現

tl; dr:性能上沒有可察覺的差異。

我使用一個包含 36 個子目錄的目錄來測試性能,每個子目錄都以單個字元命名。子目錄中總共有大約 70 000 個文件。我測試了以下內容。

$ time ls ?/* -d >/dev/null
$ time ls */* -d >/dev/null

我每個命令交替十次。這是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

經過統計分析(配對 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

這是原始數據*。同樣,我可以檢測到沒有顯著差異(p 值 = 0.55),並且每個測試的分佈看起來更相似。

圖2

引用自:https://unix.stackexchange.com/questions/223814