Je doute que cela importerait beaucoup.
J'utiliserais une boucle, juste parce que je ne sais pas combien de fichiers sont répertoriés dans le fichier de liste, et je ne sais pas (généralement) si l'un des noms de fichiers a des espaces dans leurs noms. Faire une substitution de commande qui générerait une très longue liste d'arguments peut entraîner une erreur «Liste d'arguments trop longue» lorsque la longueur de la liste générée est trop longue.
Ma boucle ressemblerait
while IFS= read -r name; do
gunzip "$name"
done <file.list
Cela me permettrait en outre d'insérer des commandes pour traiter les données après la gunzip
commande. En fait, selon ce que sont réellement les données et ce qui doit être fait avec elles, il peut même être possible de les traiter sans les enregistrer du tout:
while IFS= read -r name; do
zcat "$name" | process_data
done <file.list
(où se process_data
trouve un pipeline qui lit les données non compressées à partir de l'entrée standard)
Si le traitement des données prend plus de temps que leur décompression, la question de savoir si une boucle est plus efficace ou non devient hors de propos.
Idéalement , je préférerais ne pas travailler sur une liste de noms de fichiers et utiliser plutôt un modèle de globbing de nom de fichier, comme dans
for name in ./*.gz; do
# processing of "$name" here
done
où ./*.gz
est un modèle qui correspond aux fichiers pertinents. De cette façon, nous ne dépendons pas du nombre de fichiers ni des caractères utilisés dans les noms de fichiers (ils peuvent contenir des sauts de ligne ou d'autres espaces, ou commencer par des tirets, etc.)
En relation:
gzip
sur votre système, du nombre de fichiers dans la liste des fichiers et de la taille de ces fichiers.