Linux'ta çok parçalı (yayılmış) bir ZIP sıkıştırmasını nasıl açarım?


73

Web sunucuma 400 MB'lik bir dosya yüklemem gerekiyor, ancak 200 MB'lik yüklemelerle sınırlıyım. Ev sahibim, Linux'ta hiç yapmadığım, geniş bir arşiv kullanmamı önerdi.

Ben, kendi klasöründe bir test yarattı içine bir PDF kadar sıkıştırma test.zip.001, .002ve .003. Sıkıştırmayı nasıl giderim? Önce onlara katılmam gerekir mi?

ZIP formatlarını kullandığım kadar 7z kullanmak kadar mutlu olacağımı lütfen unutmayın. Bu sonuç için herhangi bir fark yaratırsa.


Bu, sınırlı yazılım yüklü bir web sunucusunda yardımcı olmayabilir, ancak bu çözümü başka hiçbir yerde görmedim ve kullandığım şey: java.util.zip API, attığım tüm ZIP parçalarını ele aldı. Daha genel durumlarda, takip eden parçalara sahip olmama veya son parçanın eksik olması durumunda bile. Bunu Jython'dan çağırdım
Andrzej Cichocki

Yanıtlar:


74

Önce onlara katılman gerekecek. catAşağıdaki örnekte olduğu gibi , ortak linux uygulamasını kullanabilirsiniz :

cat test.zip* > ~/test.zip

Bu tüm sıralamak olacak test.zip.001, test.zip.002bir çok büyük, test.zip dosyası içine, vb dosyaları. Bu tek dosyaya sahip olduktan sonra çalıştırabilirsiniz.unzip test.zip

"Linux'ta zip arşivleri nasıl oluşturulur, bölünür, birleştirilir ve çıkartılır" yardımcı olabilir.


1
Tamam, bu hoşuma gidiyor ... İlerleme ... Ama ben gerçekten burada Linux n00b. Sanırım x*dosya adı? Ve ~/hugefilebir dizin mi? Tilde sembolünün amacı nedir? Şüphelendiğim şeyi sorduğum için üzgünüm çok temel sorular.
Tim

Dosyaları böldüğünüzde, x_ (örneğin: x_split1, x_split2, ...; windows son ekleri file.001, file.002 ... vb.) gibi bir önek kullanmalısınız. ~ / hugefile / home / tim / hugefile ile aynıdır. dosyalarınızı böldünüz mü bölünmüş dosya adları nedir?
az

1
Sorunun en gelecektir nerede, yayılmış arşivi ZIP uzantılı 7zip kullanarak, pencere oluşturulan görüyorum, bu yüzden otomatik olarak oluşturur TEST.zip.001, TEST.zip.002ve TEST.zip.003bölünmüş çok farklı olduğu anlamına gelir. Bir VMWare'e linux atmak ve burada dosyaları oluşturmak daha kolay olabilir gibi görünmeye başlıyor, o zaman en azından sadece 1 işletim sistemi ile uğraşıyorum. HERHANGİ bir dosya tipinde SPLIT komutunu kullanabilir misiniz? yani görüntüler, sesli filmler vb.
Tim

evet, split komutu herhangi bir dosyada çalışır. apt-get ile p7zip'i kurun debian'a p7zip'i kurun ya da fedora üzerine p7zip'i kurun, dosyalara katılın: cat TEST.zip. *> arşivle ve çıkart.
hazneden

1
7za x archiveArşiv bir dizin yapısı içeriyorsa, muhtemelen daha iyidir.
slm

38

Linux unzipprogramı gerçekten çok parçalı fermuarları desteklemiyor. Gönderen kılavuzda :

Çok parçalı arşivler, zip ile birlikte kullanılması dışında henüz desteklenmemektedir. (Tüm parçalar sırayla birarada birleştirilmeli ve daha sonra zip -F (zip 2.x için) veya zip -FF(zip 3.x için) birleştirilmiş arşivde "düzeltmek" için yapılmalıdır. Ayrıca zip 3.0 ve üstü birleştirilebilir çok parçalı bir birleşik tek dosya arşiv (ayrık) arşivler kullanılarak zip -s- inarchive -O outarchive. Bkz fermuar 3 kılavuz sayfasını daha fazla bilgi için.)

Bu yüzden önce parçaları birleştirmeniz, ardından sonucu onarmanız gerekir. joker karakterin herhangi bir karakter sırasını temsil ettiği yerde cat test.zip.*bütün dosyaları bir test.zip.*araya getirir *; Dosyalar, sıra sıfırları sayesinde, sayısal sıra ile aynı olan sözlük sırasına göre sıralanır. >test.zipçıktıyı dosyaya yönlendirir test.zip.

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

Resmi Pkzip aracıyla çok parçalı bir zip oluşturmak yerine zip dosyasını doğrudan bölerek parçaları oluşturduysanız, yapmanız gereken tek şey parçalara katılmak.

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

1
2. komut zip olmalıdır -FF test.zip --out test-full.zip - --out komutu olmadan size bir hata verir
Alvin

3
Benim için, ilk çok parçalı dosyaya FFişaret etsem zipgerek yok , bu yaklaşım işe yaradı cat.
Jnisnis Elmeris

1
@ JānisElmeris'in daha önce de belirtildiği gibi, zip -FFüzerinde kullanmadan önce arşivleri birleştirmeye gerek yoktur .
René

24
7z x archive.zip.001

Gerisini otomatik olarak bulacak


1
Bu çok garip ... Bunun çalışması için, önce tüm ZIP dosyalarını (.zXX ve .zip) .zip.xxx (.zip son kısımdır) olarak yeniden adlandırmanız gerekir, sonra ilkinde 7z x kullanabilirsiniz. , daha sonra tekrar unzip kullanarak ancak 7z kullanılarak açılabilen birleştirilen bir zip'e "özler" ... Dosyanın doğru bir şekilde açılıp açılmadığından tam olarak emin değilim, ancak en azından bu kez unzip CRC hatalarıyla ilgili değil. ZIP Linux üzerinde inanılmaz derecede kırıldı - eğer yapabilirseniz kaçının. :(
Energiequant

en azından centos için, ayrıca 7z
stiv

20

Cevabı burada buldum: https://superuser.com/a/517758/10264

Bu cevap o kavram benzer olan Gilles Eğer bölünmüş kullanarak normal bir arşiv bölünmüş arşiv birleştirmek ve sonra unzip açmaktır yani ilk.

Aradaki fark, -FFbenim için çalışmayan bayrağı kullanmak yerine, zip dosyasını bölünmeden yeniden paketlemesini söylemenizdir. Yani ne -s 0bayrak anlamına gelir.

Yani, önce bölünmüş arşivi tek bir arşive birleştirin:

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

Ardından, unzip kullanarak tek arşivi çıkarın:

unzip unsplit-foo.zip

2
Bu zip 3.x için doğru cevap
texasbruce

0

Sadece başka bir örnek. Bu benim için 3GB kehanet kurulumunu bölmek için bash için çalıştı:

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

Bu önceki cevaplara çok benziyor. Ne yaptığını ve neyin zaten kaydedilenden farklı olduğunu açıklayabilir misiniz? Lütfen yorumlara cevap vermeyin; cevabınızı daha net ve daha eksiksiz hale getirmek için düzenleyin .
Scott

Merhaba Scot, Keşke yorumlarda cevap verebilseydim ama şu anda bunu yapmak için çok az noktaya ihtiyacım var. Bu cevap, unix'te büyük bir dosyayı bölmek, birleştirmek ve açmak için eksiksiz bir komut listesi sunar. Cevabımı netleştirmek için daha fazla açıklama metni sunacağım. Cevabın için teşekkürler.
TheHagueCoder

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.