Zip dosyaları nasıl birleştirilir / birleştirilir?


21

Son birkaç aydır, haftalık aralıklarla zip dosyalarına birkaç veri klasörü kopyaladım. Şimdi bu zip dosyalarını tek bir zip dosyasında birleştirmek istiyorum, çünkü mevcut zip dosyalarının içeriğinin çoğu aynı veri dosyalarının sadece farklı sürümleri.

Bir dosya mevcut zip dosyalarının birden fazlasında görünüyorsa, en yeni sürümün oluşturulmakta olan yeni zip dosyasında olmasını istiyorum. Tabii ki bir dosya mevcut bir zip dosyasında görünürse, o zaman son zip dosyasında da istiyorum.

Onları bir çalışma klasörüne tek tek açmak, yeni zip dosyalarından gelen verilerle eski zip dosyalarından verilerin üzerine yazmak ve daha sonra her şeyi yeni bir zip dosyasına yeniden yazmak zorunda kalmamaya çalışıyorum.

Anladığım kadarıyla pkzip zip dosyalarını kendileri birleştirecekti, ancak herkesin bana anlatabileceği güvenilir ve hızlı bir yöntem var mı?


1
galibiyet için fermuar
Code Bling

Yanıtlar:


7

hoşuna gitmeyecek ama: her şeyi doğru bir şekilde bir çalışma klasörüne açmak, ardından sonucu sıkıştırmak en etkili yoldur.

aksi takdirde, çok fazla boşa harcanan CPU döngüsü ile sonuçlanacaksınız:

  • sonucunuzun 'first.zip' e gittiğini varsayalım
  • '2.zip', '3.zip' vb. dosyaların her birinin sıkıştırılmasının ardından tekrar 'first.zip' dosyasına sıkıştırılması gerekir.
  • '2.zip' dosyasında 'foobar.txt' dosyası ve '3.zip' dosyasında başka bir 'foobar.txt' dosyası vardır. birleştirmek istediğiniz şekilde birleştirmek, 'X kez sıkıştır'
  • bir .zip dosyasının toc'u dosyanın sonundadır: daha fazla içerik eklersiniz (ortadaki
    bir dosyayı güncelleyerek .zip'in ortasına) ve tüm dosyanın yeniden yazılması gerekir

yani, sadece ' unzip ' wiseley kullanın :

% mkdir all
% for x in *.zip ; do unzip -d all -o -u $x ; done
% zip -r all.zip all

unzipping sırası önemlidir, zip adlarınızın desenini bilmiyorum, ama önce en yeni zip dosyasını ayıklayacağım, unzip '-u' seçeneği sadece daha yeniyse dosyaların üzerine yazar veya değilse dosyalar oluşturur zaten orada. Sonuç olarak, yalnızca en yeni dosyaları açıp sonucu yalnızca bir kez sıkıştırırsınız.


Bu, kullanıcı açısından en etkili olabilir - ancak bu doğru değildir. Bir zip'deki dosya tablosu aslında sonundadır, ancak herhangi bir zip'in sonuna rastgele dosya yazabilir ve ardından yeni bir dosya tablosu yazabilirsiniz. Son rekor her zaman kazanır. Komut dosyası oluşturma veya programlama konusunda biraz bilgi sahibi olanlar, tüm işlemleri sadece ikili parçaları hareket ettirip zip tablosunu güncelleyerek herhangi bir dosyayı sıkıştırmadan veya sıkıştırmadan yapabilir.
Caesay

Aslında, tüm zip'leri tek bir dosyada (istediğiniz sırayla) birleştirebilir ve daha sonra dosyaların yalnızca en son sürümlerini dahil etmek için yeni bir dosya kaydı yazabilirsiniz. Bu,
zip'in

msgstr "'2.zip', '3.zip' vb. 'deki her dosya sıkıştırılmalı ve sonra tekrar' first.zip 'içine sıkıştırılmalıdır" doğru değildir. Yardımcı zipmergeprogram, örneğin ZIP arşivlerini açma ve yeniden sıkıştırma olmadan birleştirir.
ZachB

Ben kullandım unzipping/ zippingdeğil uncompress / decompress. Evet, açıkçası 2.zip(sıkıştırılmış damla) 'ın bir girişini alabilir ve içine aktarabilir first.zipve böylece hiçbir "sıkıştırma" gerçekleşmez. Ama gelen damla ayıklamak zorunda 2.ziparasında TOC'de varlığı arama, first.zip, onun ya da sonunda ekler (temelde tüm dosyayı yeniden yazmak zorunda anlamına gelir) mevcut girişi var değiştirirseniz - ve gerek bundan sonra zip'in tocunu ekleyin. zipmergeZip girişlerinin farklı bir şekilde nasıl birleştirileceğini (sıkıştırma kenara) göremiyorum
Akira

-1 çünkü bu görevi yerine getirmenin çok daha etkili yolları var ve bunun en etkili yolu "en etkili yol" olmanın hiçbir anlamı en ufak bir anlam ifade etmiyor. every file [...] has to be unzipped and then zipped again- hayır, o da ne senin çözüm yapar. in '2.zip' exists a file 'foobar.txt' and in '3.zip' exists another file 'foobar.txt'. merging it the way you want to merge it leads to 'compress it X times'- hayır değil. Neden olsun ki? you add more content [...] and the whole file has to be rewritten- hayır, çıktıyı bir geçişte yazarsınız. Neden kimse bunu onayladı?
benrg

4

İstediğiniz sayıda ZIP dosyasını (eski dosyaları çıkarmadan) ekleyebileceğiniz ZIP'nin -g seçeneğini kullanmanız yeterlidir. Bu size önemli ölçüde zaman kazandıracaktır.

Ayrıca zipmerge bir göz atın


4
-gvarolan bir zip'e dosya ekler. onları birleştirmez. ör .: zip -g result.zip other.zipdosyayı other.zipfile.zip . --grow içine ekler Yeni bir tane oluşturmak yerine belirtilen zip arşivini büyütün (ekleyin). Bu işlem başarısız olursa zip, arşivi orijinal durumuna geri yüklemeye çalışır. Geri yükleme başarısız olursa arşiv bozulabilir. Mevcut bir arşiv olmadığında veya en az bir arşiv üyesinin güncellenmesi veya silinmesi gerektiğinde bu seçenek göz ardı edilir.`
akira



1

Çıkarılan dosyaları geçici bir dizine yazabileceğinizi düşünüyordum.

Bu komut satırında sorun var. Arşivleri açmayı sipariş etmenin bir yolunu bulamadım, böylece daha eski bir arşiv daha yeni bir arşivin üzerine yazabilir. Bu sorun, yalnızca yenisi üzerine yazmak için bir komut satırı anahtarı olan bir unzipper kullanılarak aşılabilir. Esas olarak böyle bir komut satırı seçeneği olmayan 7-Zip kullanıyorum.

Ayrıca, bu komutun tüm zip dosyalarının aynı dizinde olması gerekir. Tüm fermuarların benzersiz isimleri varsa sorun değil. Bununla birlikte, komut durumunuza uyacak şekilde değiştirilebilir.

for /f %f in ('dir /b *.zip') do "c:\program files\7-zip\7z" x %f -oc:\testdir -r -aoa

Başka bir unzipping programı kullanmak için bunu değiştirmek için "c:\program files\7-zip\7z" x %f -oc:\testdir -r -aoa, her dosyada hangi komutu uygularsanız değiştirin . %fSıkıştırmak istediğiniz dosyanın adı için yer tutucu olarak kullanın .

Cilalı bir uygulama aramayı denedim, ücretsiz veya başka türlü ve gerçekten bir tane bulamadım.

Umarım bu size iyi bir başlangıç ​​sağlar ve WinZip veya benzeri bir şey üzerine yazma sorunuyla ilgilenebilir.

İyi şanslar.


0

Doğru hatırlarsam, pkzip bir komut satırı programıdır.

Hala pkzip ile uyumlu olduğunu iddia eden bir komut satırı sürümü ZIP var.

Buna Info-ZIP denir ve işletim sisteminiz için bir sürüm olmalıdır.


Sorduğum işlevsellik var mı? Bu yeteneği nerede listelediğini bulamıyorum.
CChriss

1
Info-Zip paketi dosyaları PKZip ile uyumlu hale getirir , ancak programların kendileri farklıdır ve bir birleştirme seçeneği içermiyor gibi görünür.
CarlF

Tamam, üzgünüm, DOMAIN / OS altında bir Apollo iş istasyonunda uzun yıllar önce Info-Zip'i derleyip çalıştırabildim. DOS / VMS / Unix ve o zaman bile birkaç farklı özellik sağladığını hatırlıyorum. Sanırım daha da gelişmiş olabilir.
pavium

0

İnternette winzip komut satırı arayın. Winzip, yüklemiş olabileceğiniz herhangi bir winzip sürümüne uyacak şekilde çeşitli komut satırı araçlarına sahiptir. Komut satırı aracı WZZIP, yalnızca toplama toplamı zip dosyasındaki bir dosyanın adıyla eşleşen yeni dosyaları zipleyecek bir -f "freshen" seçeneğine sahiptir.

Bir dosyayı bir dizine çıkartmak için bir FOR deyimine sarılmış WZunzip kullanın, ardından bu dosyaları bir çıktı toplama zip dosyasına eklemek için WZzip -f kullanın. Daha sonra FOR döngüsü, bir ve tek toplam çıkış dosyasına çıktı vermek için bir sonraki girdi dosyasında çalışmak için tekrar eder. Giriş dosyalarının sırası önemli değildir, çünkü WZzip -f yalnızca girdi dosyasına çıktı dosyasında bulunandan daha yeni ise çıktı dosyasına eklenir. Çıktı dosyasında bulunmayan tüm dosyalar da eklenecektir. Ardından, sonucu bir klasöre açıp verimli bir şekilde paketlenmiş bir sonuç dosyası elde etmek için tekrar sıkıştırın. Bunu toplu iş dosyasının sonundaki FOR döngüsünden sonra bile otomatik olarak yapabilirsiniz.

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.