Làm cách nào để nén tệp có giới hạn kích thước?


18

Tôi có một tập lệnh nén các tập tin từ một thư mục. Tôi muốn đảm bảo rằng tệp nén không quá 10 MB. Nếu kích thước lớn hơn 10 MB, nó sẽ tạo một tệp ZIP khác.

Có bất kỳ lệnh (hoặc phương pháp khác) có thể được sử dụng cho việc này?


1
Câu hỏi có thẻ gzip nhưng văn bản đề cập đến zip , bạn có thể làm rõ? (Các câu trả lời được phân chia giữa các cách tiếp cận dựa trên các định dạng khác nhau.)
Håkan Lindqvist

Tôi không thể thêm zip vào thẻ đó là lý do tại sao tôi sử dụng gzip, Nếu bạn có một phương pháp gzip mà tôi có thể phù hợp với vấn đề này, tôi cũng có thể sử dụng nó.
Vishnu

Câu trả lời:


20

Bạn có thể sử dụng chức năng " lưu trữ phân chia " của chính " zip " bằng cách sử dụng tùy chọn " --split-size ".

Từ trang "zip" (" man zip"):

(...)

Một lần sử dụng tài liệu lưu trữ phân chia là lưu trữ một kho lưu trữ lớn trên nhiều
phương tiện có thể gỡ bỏ . Đối với kho lưu trữ phân chia với 20 tệp phân tách, các tệp được
đặt tên chính xác (thay thế ARCHIVE bằng tên lưu trữ của bạn) AR‐
CHIVE.z01, ARCHIVE.z02, ..., ARCHIVE.z19, ARCHIVE.zip. Lưu ý rằng
tệp cuối cùng là tệp .zip.

(...)

-s splitsize
--split-size split

Chia kích thước là một số tùy chọn theo sau là một số nhân.
Hiện tại số phải là một số nguyên. Hệ số nhân
hiện có thể là một trong k (kilobyte), m (megabyte), g (gigabyte)
hoặc t (terabyte). Vì 64k là kích thước phân chia tối thiểu, các số
không có bội số mặc định là megabyte. Ví dụ: để tạo
một kho lưu trữ phân tách được gọi là foo với nội dung của
thư mục thanh với các phần tách là 670 MB có thể hữu ích để ghi
trên đĩa CD, lệnh:

                zip -s 670m -r foo bar

có thể được sử dụng.

Vì vậy, để tạo một kho lưu trữ zip tách , bạn có thể thực hiện các thao tác sau (" -r" là công tắc "đệ quy" để bao gồm các thư mục con của thư mục):

$ zip -r -s 10m archive.zip directory/

Để giải nén tệp , " zip" manpage giải thích rằng bạn nên sử dụng công tắc "-s 0`":

(...)

 zip -s 0 split.zip --out unsplit.zip

sẽ chuyển đổi một kho lưu trữ tách thành một kho lưu trữ một tập tin.

(...)

Vì vậy, trước tiên bạn "hủy đặt" tệp ZIP bằng cách sử dụng công tắc "-s 0":

$ zip -s 0 archive.zip --out unsplit.zip

... và sau đó bạn giải nén tệp unplit:

$ unzip unsplit.zip


6
tar -czvf - /path/to/files | split -b 10M - archive.tar.gz

Sẽ cung cấp cho bạn một số tệp:

archive.tar.gzaa

archive.tar.gzab

...

Mà sau đó có thể được giải nén với:

cat archive.tar.* | tar -xzvf -

2

Đây là cách tôi đã làm với tệp 5 GB (chia thành 1 GB so với 10 MB như OP yêu cầu) ...

Ví dụ: Để chia tệp 5 GB thành tệp 1 GB để sao chép vào USB FAT32 (tên tệp "FIVE_GB_FILE.ISO")

Bước 1: nén tệp (không nén, cùng thư mục với nguồn)

zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO

Bước 2 : chia tệp zip 5GB thành tệp zip 1GB

zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP

Voila ... bạn nên có các tệp 1GB sau (VÀ bản gốc, VÀ mã zip từ bước 1)

SPLIT_5GB_FILES.zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.