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?
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?
Câu trả lời:
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 splitChia 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
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 -
Đâ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