Wildcards
是否有理由在文件名擴展中使用多個問號而不是星號?
如果我有多個目錄,例如
10001
通過命名,10025
是否有任何理由使用ls 1*/foo
vs.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