Я сумніваюся, це мало б значення.
Я б використав цикл, лише тому, що я не знаю, скільки файлів перелічено у списку, і я (як правило) не знаю, чи є в будь-якій з імен файлів пробіли у їх іменах. Виконання підстановки команди, яка б генерувала дуже довгий список аргументів, може призвести до помилки "Аргумент задовгий", коли довжина генерованого списку занадто довга.
Моя петля виглядала б так
while IFS= read -r name; do
gunzip "$name"
done <file.list
Це додатково дозволить мені вставити команди для обробки даних після gunzipкоманди. Насправді, залежно від того, що насправді є даними, і що з ними потрібно робити, обробляти їх можливо навіть без збереження у файлі:
while IFS= read -r name; do
zcat "$name" | process_data
done <file.list
(де process_dataдеякий конвеєр, який читає нестиснені дані зі стандартного вводу)
Якщо обробка даних займає більше часу, ніж її розтискання, питання про те, чи є цикл більш ефективним чи ні, не має значення.
В ідеалі я хотів би не хотіти опрацьовувати список імен файлів, а замість цього використовувати шаблон глобулінгу назви файлів, як у
for name in ./*.gz; do
# processing of "$name" here
done
де ./*.gzє деякий шаблон, який відповідає відповідним файлам. Таким чином, ми не залежно від кількості файлів, ані від символів, які використовуються у назви файлів (вони можуть містити нові рядки або інші символи пробілу, або починати з тире тощо)
Пов'язані:
gzipу вашій системі, кількості файлів у списку файлів та розміру цих файлів.