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?
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":
Jawaban:
Anda dapat menggunakan fungsionalitas " arsip split " dari " zip " itu sendiri menggunakan opsi " --split-size ".
Dari manpage "zip" ("
man zip
"):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
zip
manual " " menjelaskan bahwa Anda harus menggunakan sakelar "-s 0`":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
sumber
Akan memberi Anda sejumlah file:
Yang kemudian dapat dikompresi dengan:
sumber
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)
Langkah 2 : pisahkan file zip 5GB menjadi file zip 1GB
Voila ... Anda harus memiliki file 1GB berikut (DAN aslinya, DAN zip dari langkah 1)
sumber