Zip banyak file menjadi beberapa arsip

13

Menjalankan Linux. Saya memiliki direktori sekitar 150 file CSV besar; hanya melakukan zip -9pada mereka menghasilkan file monolitik yang masih terlalu besar. Saya ingin cukup zip mereka mungkin dalam empat atau lima file zip 30-40 CSV masing-masing; dengan cara ini, mengurutkan atau membentang pesanan zip tidak akan menjadi masalah, karena setiap zip independen. Pasti ada cara sederhana untuk melakukan ini. Ada saran?

(dan ya, zip adalah format yang disukai, jika mungkin)

Tanpa Dunia
sumber

Jawaban:

23

Bukankah -sudah cukup? Anda dapat menggunakan zip -s untuk membagi file menjadi file dengan ukuran maksimum, misalnya:

"zip -s 300m <2 gb file>" menghasilkan:

file.zip (300 mb, master file)
file.001.zip (300 mb)
file.002.zip (300 mb)
file.003.zip (300 mb)
file.004.zip (300 mb)
file.005.zip (300 mb)
file.006.zip (200 mb)

Kemudian "unzip file.zip" akan meng-unzip semuanya.

Ranisalt
sumber
Apa versi zip ini ?? Saya mendapatkan file.z01 file.z02 ... file.zip dan unzip file.ziptidak bekerja secara langsung (saya akan menggunakan zip -F untuk mengkombinasikan mereka terlebih dahulu). Perhatikan ini bukan "independen" seperti yang diminta.
sourcejedi
1
@sourcejedi: Dalam jawaban ini ( superuser.com/a/602736/195224 ) adalah beberapa penjelasan yang lebih rinci.
mpy
@ mpy Saya tahu, saya baru saja menulis jawaban itu :).
sourcejedi
@sourcejedi: Oh ya, sekarang Anda mengatakannya ...;)
mpy
2

Gunakan split pada daftar file input :-).

(Tidak diuji, saya sudah memasukkan perintah rm untuk pembersihan, berhati-hatilah).

ls *.csv > csvfiles
split -d -l30 - csvfiles < csvfiles
for i in csvfiles[0-9][0-9]; do
  zip "$i.zip" -@ < "$i"
done

rm csvfiles
rm csvfiles[0-9][0-9]
sourcejedi
sumber
Mengapa Anda menggunakan split -C( --line-bytes) dan tidak split -l( --lines)? Itu akan lebih mudah diprediksi, berkenaan dengan berapa banyak file CSV dalam satu arsip.
mpy
Aku membaca halaman manual terlalu cepat. Terima kasih, saya akan memperbaikinya!
sourcejedi