Они означают разные вещи. Звездочка соответствует символам от нуля до бесконечности. Вопросительный знак соответствует ровно одному символу.
Из приведенных выше ссылок:
Символ * служит «подстановочным знаком» для расширения имени файла в подстановке.
Значок? символ служит односимвольным «шаблоном» для расширения имени файла при подстановке слов…
tl; dr: нет заметной разницы в производительности.
Я тестировал производительность, используя каталог, заполненный 36 подкаталогами, каждый из которых назван одним символом. В совокупности в подкаталогах было около 70 000 файлов. Я проверил следующее.
$ time ls ?/* -d >/dev/null
$ time ls */* -d >/dev/null
Я чередовал каждую команду по десять раз. Вот результаты для реального
времени в секундах.
? *
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), и распределение каждого теста выглядит более похожим.