Bagaimana cara unzip ZIP multipart (terbentang) di Linux?


74

Saya perlu mengunggah file 400MB ke server web saya, tetapi saya terbatas pada unggahan 200MB. Tuan rumah saya menyarankan saya menggunakan arsip terentang, yang belum pernah saya lakukan di Linux.

Saya membuat tes di folder sendiri, zipping sebuah PDF ke test.zip.001, .002, dan .003. Bagaimana cara membuka ritsletingnya? Apakah saya perlu bergabung dengan mereka terlebih dahulu?

Harap dicatat bahwa saya akan senang menggunakan 7z karena saya menggunakan format ZIP. Jika ini ada bedanya dengan hasilnya.


Ini mungkin tidak membantu pada server web dengan perangkat lunak terbatas yang diinstal, tapi saya belum melihat solusi ini di tempat lain dan itulah yang saya gunakan: Java.util.zip API telah berurusan dengan semua bagian ZIP yang telah saya berikan. , bahkan dalam kasus yang lebih umum tidak memiliki bagian yang tertinggal atau bagian yang terakhir tidak lengkap. Saya menyebutnya dari Jython sehingga dalam bentuk skrip, dan ini adalah kodenya: github.com/combatopera/unzipparts
Andrzej Cichocki

Jawaban:


75

Anda harus bergabung terlebih dahulu dengan mereka. Anda dapat menggunakan aplikasi linux yang umum, catseperti dalam contoh di bawah ini:

cat test.zip* > ~/test.zip

Ini akan menggabungkan semua Anda test.zip.001, test.zip.002, dll file menjadi satu lebih besar, berkas test.zip. Setelah Anda memiliki file tunggal itu, Anda dapat menjalankannyaunzip test.zip

"Cara membuat, membagi, bergabung, dan mengekstrak arsip zip di Linux" dapat membantu.


1
OK, saya suka itu ... Kemajuan ... Tapi saya benar-benar Linux n00b di sini. Saya berasumsi x*adalah nama file? Dan ~/hugefileapakah direktori? Apa tujuan dari simbol tilde? Maaf untuk menanyakan apa yang saya curigai adalah pertanyaan yang sangat mendasar.
Tim

ketika Anda membagi file, Anda harus menggunakan awalan seperti x_ (mis: x_split1, x_split2, ...; seperti file sufiks windows.001, file.002 ... dll) tilde mewakili direktori home Anda. ~ / hugefile sama dengan / home / tim / hugefile. Apakah Anda membagi file Anda? apa nama file split?
fromnaboo

1
Saya rasa saya melihat di mana masalah ini akan datang, arsip Spanned dibuat di windows, menggunakan 7zip dengan ekstensi ZIP, sehingga otomatis dibuat sebagai TEST.zip.001, TEST.zip.002dan TEST.zip.003yang berarti pemisahannya sangat berbeda. Ini mulai terlihat seperti mungkin lebih mudah untuk melemparkan linux pada VMWare dan membuat file di sini, maka setidaknya saya hanya berurusan dengan 1 OS. Bisakah Anda menggunakan perintah SPLIT pada jenis file APA SAJA? yaitu gambar, film audio dll?
Tim

ya, perintah split berfungsi pada file apa pun. instal p7zip dengan apt-get install p7zip di debian atau yum instal p7zip di fedora, gabungkan file-file dengan: cat TEST.zip. *> arsipkan dan ekstrak dengan.
fromnaboo

1
7za x archivemungkin lebih baik jika arsip berisi struktur direktori.
slm

38

unzipUtilitas Linux tidak benar-benar mendukung ritsleting multi-bagian. Dari manual :

Arsip multi-bagian belum didukung, kecuali dalam hubungannya dengan zip. (Semua bagian harus digabung bersama dalam urutan, dan kemudian zip -F (untuk zip 2.x) atau zip -FF(untuk zip 3.x) harus dilakukan pada arsip bersambung untuk "memperbaikinya". Juga, zip 3.0 dan yang lebih baru dapat menggabungkan arsip multi-bagian (pisah) menjadi arsip file tunggal gabungan menggunakan zip -s- inarchive -O outarchive. Lihat halaman manual zip 3 untuk informasi lebih lanjut.)

Jadi, Anda harus terlebih dahulu menyatukan potongan, kemudian memperbaiki hasilnya. cat test.zip.*menggabungkan semua file yang disebut di test.zip.*mana wildcard *berdiri untuk urutan karakter apa pun; file-file tersebut disebutkan dalam urutan leksikografis, yang sama dengan urutan numerik berkat angka nol di depan. >test.zipmengarahkan output ke file test.zip.

cat test.zip.* >test.zip
zip -FF test.zip --out test-full.zip
unzip test-full.zip

Jika Anda membuat potongan-potongan dengan langsung membagi file zip, sebagai lawan membuat zip multi-bagian dengan utilitas Pkzip resmi, yang perlu Anda lakukan adalah bergabung dengan bagian-bagian.

cat test.zip.* >test.zip
unzip test.zip

1
perintah ke-2 harus berupa zip -FF test.zip --out test-full.zip - akan memberi Anda kesalahan tanpa perintah --out
Alvin

3
Bagi saya, FFpendekatan itu berhasil jika saya menunjuk zipke file multi-bagian pertama, tidak catdiperlukan.
Jānis Elmeris

1
Seperti yang telah disebutkan oleh @ JānisElmeris, tidak perlu menyatukan arsip sebelum menggunakannya zip -FF.
René

24
7z x archive.zip.001

Secara otomatis akan menemukan sisanya


1
Aneh sekali ... Agar ini berfungsi, Anda harus mengganti nama semua file ZIP (.zXX dan .zip) terlebih dahulu menjadi .zip.xxx (.zip adalah bagian terakhir), maka Anda dapat menggunakan 7z x pada yang pertama , yang "mengekstrak" ke zip gabungan yang kemudian dapat didekompresi menggunakan unzip tetapi tidak 7z ... Saya tidak sepenuhnya yakin apakah file telah dibongkar dengan benar tetapi setidaknya kali ini unzip tidak complan tentang kesalahan CRC .. ZIP sangat rusak di Linux - hindari jika Anda bisa. :(
Energiequant

setidaknya untuk centos, kita juga memerlukan instruksi bagaimana menginstal 7z
stiv

20

Saya menemukan jawabannya di sini: https://superuser.com/a/517758/10264

Jawaban ini mirip dalam konsepnya dengan Gilles , yaitu pertama Anda menggabungkan arsip split menjadi arsip normal menggunakan split, dan kemudian Anda membukanya menggunakan unzip.

Perbedaannya adalah bahwa alih-alih menggunakan -FFflag, yang tidak berfungsi untuk saya, Anda hanya meminta zip untuk mengemas ulang file yang dipisah tanpa membelah. Itulah arti -s 0bendera itu.

Jadi, pertama, gabungkan arsip pisah ke arsip tunggal:

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

Lalu, ekstrak arsip tunggal menggunakan unzip:

unzip unsplit-foo.zip

2
Ini adalah jawaban yang benar untuk zip 3.x
texasbruce

0

Contoh lainnya. Ini berhasil bagi saya di bash untuk membagi 3GB installer oracle:

echo "<installOracleDB.sh>: Splitting OracleDB installer"
zip /tmp/linuxx64_12201_database.zip --out /tmp/linuxx64_12201_oradb.zip -s 1000m
echo "<installOracleDB.sh>: Merging OracleDB installer"
zip -FF /tmp/linuxx64_12201_oradb.zip --out /tmp/linuxx64_12201_database.zip
echo "<installOracleDB.sh>: Removing temporary files OracleDB installer"
find /tmp -type f -name 'linuxx64_12201_oradb*' -exec rm {} +
echo "<installOracleDB.sh>: Unizipping OracleDB installer"
unzip /tmp/linuxx64_12201_database.zip

Ini terlihat sangat mirip dengan jawaban sebelumnya. Bisakah Anda menjelaskan apa yang dilakukannya, dan bagaimana perbedaannya dari apa yang sudah diposting? Tolong jangan menanggapi dalam komentar; edit jawaban Anda untuk membuatnya lebih jelas dan lebih lengkap.
Scott

Halo Scot, saya berharap saya bisa menjawab di komentar tetapi saya harus poin kecil untuk melakukan itu sekarang. Jawaban ini memberikan daftar lengkap perintah untuk memecah, menggabungkan, dan unzip file besar di unix. Saya akan memberikan lebih banyak penjelasan teks untuk memperjelas jawaban saya. Terimakasih atas balasan anda.
TheHagueCoder

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.