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?
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?
Jawaban:
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 splitsizeUkuran 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 zip
manual " " 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
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 -
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