Thông thường, cả gzip và tar đều không thể tạo ra "tar.gz nhỏ nhất tuyệt đối". Có nhiều tiện ích nén có thể nén theo định dạng gz. Tôi đã viết một kịch bản bash " gz99 " thử gzip
, 7z
và advdef
để có được những tập tin nhỏ nhất. Để sử dụng điều này để tạo tập tin nhỏ nhất có thể chạy:
tar c path/to/data | gz99 file.gz
Các advdef
tiện ích từ AdvanceCOMP thường cung cấp cho các tập tin nhỏ nhất, nhưng cũng là lỗi (các gz99
kiểm tra tiện ích mà nó đã không bị hỏng các tập tin trước khi chấp nhận kết quả của advdef
). Để sử dụng advdef
trực tiếp, hãy tạo file.tar.gz theo cách bạn muốn. Sau đó chạy:
advdef -z -4 file.tar.gz
Điều này sẽ tạo ra một tệp gz tiêu chuẩn có thể được đọc bằng gzip và tar như bình thường, chỉ nhỏ hơn một chút. Đây là về điều tốt nhất bạn có thể làm với định dạng gz.
Vì gần đây bạn mới biết rằng tar có thể nén và không nói lý do tại sao bạn muốn tệp ".tar.gz" nhỏ nhất, bạn có thể không biết rằng có thể sử dụng các định dạng hiệu quả hơn với các tệp tar, chẳng hạn như xz. Nói chung, việc chuyển sang một định dạng khác có thể giúp cải thiện khả năng nén tốt hơn nhiều so với vòng xoay với các tùy chọn gzip. Nhược điểm chính của xz là nó không phổ biến như gzip nên những người bạn gửi tệp có thể phải cài đặt gói mới. Nó cũng có xu hướng chậm hơn một chút, đặc biệt là khi nén. Nếu điều này không quan trọng với bạn và bạn thực sự muốn tập tin tar nhỏ nhất, hãy thử:
tar cv path/to/data | xz -9 > file.tar.xz
Các phiên bản hiện đại của tar, ví dụ trên Ubuntu 13.10, tự động phát hiện các tệp nén. Vì vậy, ngay cả khi bạn sử dụng nén xz, bạn vẫn có thể giải nén như bình thường:
tar xvf file.tar.xz
Để đưa ra ý tưởng nhanh về cách các tiện ích nén này so sánh, hãy xem xét hiệu quả của việc nén patch-3.1.1 từ kernel linux:
utility cpu format size(bytes)
gzip -9 0.02s gz 105,628
advdef -2 0.07s gz 102,619
7z -mx=9 -tgzip 0.42s gz 102,297
advdef -3 0.55s gz 102,290
advdef -4 0.75s gz 101,956
xz -9 0.03s xz 91,064
xz -3e 0.15s xz 90,996
Trong ví dụ tầm thường này, chúng ta thấy rằng để có được gz nhỏ nhất, chúng ta cần advdef (mặc dù 7z -tgzip gần như tốt và ít lỗi hơn rất nhiều). Chúng tôi cũng thấy rằng việc chuyển sang xz giúp chúng tôi có nhiều không gian hơn so với việc cố gắng tận dụng tối đa định dạng gz cũ, mà không cần nén quá lâu.