Tôi nghi ngờ nó sẽ quan trọng nhiều.
Tôi sẽ sử dụng một vòng lặp, chỉ vì tôi không biết có bao nhiêu tệp được liệt kê trong tệp danh sách và tôi (nói chung) không biết liệu có bất kỳ tên tệp nào có dấu cách trong tên của chúng không. Thực hiện thay thế lệnh sẽ tạo ra một danh sách đối số rất dài có thể dẫn đến lỗi "Danh sách đối số quá dài" khi độ dài của danh sách được tạo quá dài.
Vòng lặp của tôi sẽ giống như
while IFS= read -r name; do
gunzip "$name"
done <file.list
Điều này cũng cho phép tôi chèn các lệnh để xử lý dữ liệu sau gunzip
lệnh. Trong thực tế, tùy thuộc vào dữ liệu thực sự là gì và cần phải làm gì với dữ liệu đó, thậm chí có thể xử lý dữ liệu mà không lưu dữ liệu vào tệp:
while IFS= read -r name; do
zcat "$name" | process_data
done <file.list
(nơi process_data
một số đường ống đọc dữ liệu không nén từ đầu vào tiêu chuẩn)
Nếu việc xử lý dữ liệu mất nhiều thời gian hơn việc giải nén dữ liệu, câu hỏi liệu một vòng lặp có hiệu quả hơn hay không trở nên không liên quan.
Lý tưởng nhất là tôi không muốn làm việc với một danh sách tên tệp, và thay vào đó sử dụng một mẫu tên tập tin, như trong
for name in ./*.gz; do
# processing of "$name" here
done
nơi ./*.gz
là một số mô hình phù hợp với các tập tin có liên quan. Bằng cách này, chúng tôi không phụ thuộc vào số lượng tệp cũng như các ký tự được sử dụng trong tên tệp (chúng có thể chứa dòng mới hoặc các ký tự khoảng trắng khác hoặc bắt đầu bằng dấu gạch ngang, v.v.)
Liên quan:
gzip
trên hệ thống của bạn, số lượng tệp trong danh sách tệp và kích thước của các tệp đó.