10001
たとえば、命名などで複数のディレクトリがある場合、vsを10025
使用する理由はありますか?ls 1*/foo
ls 100??/foo
25を超えているので、主に速度に違いがあるのかと思います。
私は2つの使用法の違いを知っています。アスタリスクは、より長いファイル名と一致します(例:)10001.backup
。しかし、私のルールを満たさないファイルがないとしましょう。後ろに違いはありますか?
答え1
機能
彼らの意味は異なります。これスター0から無限大までの文字を一致させます。これ疑問符正確に1文字に一致します。
上記の参考資料から:
*文字はワイルドカードのファイル名拡張のための「ワイルドカード」として機能します。
これ?文字は、ワイルドカードのファイル名拡張子の単一文字「ワイルドカード」として機能します。
パフォーマンス
tl;dr: パフォーマンスには顕著な違いはありません。
私はそれぞれ単一の文字で名前が付けられた36のサブディレクトリを含むディレクトリを使用してパフォーマンスをテストしました。サブディレクトリには合計約70,000のファイルがあります。私は以下をテストしました。
$ time ls ?/* -d >/dev/null
$ time ls */* -d >/dev/null
私は各コマンドを10回交互に使用しました。以下は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検定、両側検定)の後、2つの値間の性能差は見られなかった(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
答え2
??
globが存在するか、他の長いファイルが存在する可能性がある場合、これはより具体的です*
。
% touch 10001 100dalmations
% ls 100??
10001
% ls 100*
10001 100dalmations
%