-
File do tar của macOS tạo ra lớn hơn 15 lần so với file tạo bằng hàm
tarfilecủa Python -
Nguyên nhân: BSD/GNU tar đưa các tệp vào trong file nén mà không theo thứ tự, nên tùy loại tệp mà tỷ lệ nén có thể kém hơn
→ hàm tarfile của Python mặc định có sắp xếp
- Với GNU tar, có thể dùng tùy chọn
--sortđể sắp xếp theoname/inodetrước khi đưa vào → khi áp dụng sắp xếp thì cho cùng tỷ lệ nén
4 bình luận
Mình hơi chưa hiểu, tại sao khi áp dụng sắp xếp thì tỷ lệ nén lại thay đổi nhỉ? Tỷ lệ nén của từng tệp riêng lẻ thì vẫn sẽ như nhau mà.
Thuật toán đang được dùng là Deflate. Nó lưu những nội dung đã dùng để nén trước đó trong một cửa sổ trượt. Ví dụ lần này xử lý 10 byte thì 10 byte vừa xử lý sẽ được thêm vào cuối cửa sổ trượt, và kích thước của cửa sổ trượt là cố định.
Khi phát hiện nội dung trùng với nội dung trong cửa sổ trượt, nó sẽ ghi LLD (Literal, Length, Distance) thay thế để nén. Distance là vị trí trong cửa sổ trượt mà nội dung bắt đầu giống nhau, Length là độ dài phần giống nhau trong cửa sổ trượt, còn Literal là ký tự đầu tiên không giống.
Vì Deflate phụ thuộc vào việc trong cửa sổ trượt đang chứa gì, nên việc ngay trước đó có gặp nội dung tương tự hay không là rất quan trọng; nếu đã thấy các tệp tương tự thì khả năng nén tốt hơn sẽ cao hơn.
Cách nén được thực hiện như thế nào thì hãy tham khảo slide bên dưới. (
gzipcũng dựa trên Deflate.)https://speakerdeck.com/dalinaum/…
Vì nội dung của các tệp có cùng tên/tên tương tự trong cùng một thư mục sẽ giống nhau nên tỷ lệ nén sẽ cao,
có lẽ ý ở đây là phạm vi tìm các điểm giống nhau khi nén không quá rộng, nên nếu sắp xếp các tệp thì những tệp tương tự sẽ được gom lại và khả năng được nén hiệu quả hơn sẽ cao hơn.