Bagaimana cara zip file dengan batas ukuran?

19

Saya memiliki skrip yang menyalin file dari folder. Saya ingin memastikan bahwa file zip tidak lebih dari 10 MB. Jika ukurannya lebih dari 10MB, itu harus membuat file ZIP lain.

Apakah ada perintah (atau metode lain) yang dapat digunakan untuk ini?

Wisnu
sumber
1
Pertanyaannya memiliki tag gzip tetapi teksnya mengacu pada zip , dapatkah Anda mengklarifikasi? (Jawabannya dibagi antara pendekatan berdasarkan format yang berbeda.)
Håkan Lindqvist
Saya tidak dapat menambahkan zip ke tag itu sebabnya saya menggunakan gzip, Jika Anda memiliki metode gzip yang dapat saya cocok dengan masalah ini, saya dapat menggunakannya juga.
Wisnu

Jawaban:

21

Anda dapat menggunakan fungsionalitas " arsip split " dari " zip " itu sendiri menggunakan opsi " --split-size ".

Dari manpage "zip" (" man zip"):

(...)

Salah satu penggunaan arsip terpisah adalah menyimpan arsip besar di banyak
media yang bisa dilepas . Untuk arsip pisah dengan 20 file pisah, file tersebut biasanya
diberi nama (ganti ARCHIVE dengan nama arsip Anda) AR-
CHIVE.z01, ARCHIVE.z02, ..., ARCHIVE.z19, ARCHIVE.zip. Perhatikan bahwa
file terakhir adalah file .zip.

(...)

-s splitsize
--split-size splitsize

Ukuran terbagi adalah angka yang secara opsional diikuti oleh pengali.
Saat ini angka tersebut harus berupa bilangan bulat. Pengganda
saat ini dapat berupa salah satu dari k (kilobyte), m (megabita), g (gigabita),
atau t (terabita). Karena 64k adalah ukuran pemisahan minimum, angka
tanpa pengganda default ke megabita. Misalnya, untuk membuat
arsip split yang disebut foo dengan isi
direktori bar dengan split 670 MB yang mungkin berguna untuk membakar
pada CD, perintah:

                zip -s 670m -r foo bar

bisa digunakan.

Jadi, untuk membuat arsip zip terpisah , Anda bisa melakukan yang berikut (" -r" adalah saklar "rekursif" untuk memasukkan subdirektori dari direktori):

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

Untuk membuka zip file , halaman zipmanual " " menjelaskan bahwa Anda harus menggunakan sakelar "-s 0`":

(...)

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

akan mengonversi arsip pisah menjadi arsip satu file.

(...)

Jadi, pertama-tama Anda "hapus" file ZIP menggunakan sakelar "-s 0":

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

... dan kemudian Anda unzip file unsplit:

$ unzip unsplit.zip

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

Akan memberi Anda sejumlah file:

archive.tar.gzaa

archive.tar.gzab

...

Yang kemudian dapat dikompresi dengan:

cat archive.tar.* | tar -xzvf -
Henrik Carlqvist
sumber
2

Inilah cara saya melakukannya untuk file 5GB (dibagi menjadi 1GB vs 10MB seperti yang diminta OP) ...

Contoh: Untuk membagi file 5GB menjadi file 1GB untuk disalin ke FAT32 USB (nama file "FIVE_GB_FILE.ISO")

Langkah 1: zip file (tidak ada kompresi, direktori yang sama dengan sumber)

zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO

Langkah 2 : pisahkan file zip 5GB menjadi file zip 1GB

zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP

Voila ... Anda harus memiliki file 1GB berikut (DAN aslinya, DAN zip dari langkah 1)

SPLIT_5GB_FILES.zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04
Jay Marm
sumber