Wątpię, żeby to miało znaczenie.
Użyłbym pętli tylko dlatego, że nie wiem, ile plików znajduje się na liście plików, i nie wiem (ogólnie), czy w nazwach plików znajdują się spacje. Wykonanie podstawienia polecenia, które wygenerowałoby bardzo długą listę argumentów, może spowodować błąd „Zbyt długa lista argumentów”, gdy wygenerowana lista jest zbyt długa.
Moja pętla wyglądałaby
while IFS= read -r name; do
gunzip "$name"
done <file.list
To dodatkowo pozwoliłoby mi wstawiać polecenia do przetwarzania danych po gunzip
poleceniu. W rzeczywistości, w zależności od tego, jakie są dane i co należy z nimi zrobić, może być nawet możliwe ich przetwarzanie bez zapisywania go w pliku:
while IFS= read -r name; do
zcat "$name" | process_data
done <file.list
(gdzie process_data
jest jakiś potok odczytujący nieskompresowane dane ze standardowego wejścia)
Jeśli przetwarzanie danych trwa dłużej niż jego rozpakowanie, pytanie, czy pętla jest bardziej wydajna, czy nie, staje się nieistotne.
Idealnie wolałbym jednak nie wyłączać listy nazw plików i zamiast tego używać wzorca globowania nazw plików, jak w
for name in ./*.gz; do
# processing of "$name" here
done
gdzie ./*.gz
jest jakiś wzór pasujący do odpowiednich plików. W ten sposób nie jesteśmy zależni od liczby plików ani od znaków używanych w nazwach plików (mogą zawierać znaki nowej linii lub inne białe znaki, lub zaczynać od myślników itp.)
Związane z:
gzip
systemu, liczby plików na liście plików i wielkości tych plików.