Bir zip arşivindeki bir dosya nasıl güncellenir


88

Bir zip dosyasındaki bir dosyayı, eski dosyayı silmeden, yeni dosyayı ekleyip yeniden geri yüklemeden değiştirmek mümkün müdür?

Nedeni, gerçekten büyük bir zip dosyam var, zip dosyasının içinde bazen güncellemem gereken bir xml var. Zip'i açmak ve yeniden açmak uzun zaman alıyor. Bu yüzden, zip içindeki bir xml'yi bir komut dosyası aracılığıyla değiştirebilmek istiyorum. Sahip olduğum xml ile ilgili güncellemeleri kontrol ettim zaten.

Öyleyse, bir xml'yi sıkıştırmadan ve yeniden yüklemeden değiştirmek mümkün mü?

Maalesef bunun gibi şeyler yapmak için zip komutunu kullanırdım ama sorun şu ki komut dosyası aslında bir android telefon için ve zip maalesef kullanabileceğim bir komut değil üzgünüm bunu bıraktım. Yapabilseydim kesinlikle zip kullanırdım ama sadece droid için unzip'im var ve sonra meşgul kutusunda katran var ama tar ihtiyacım olanı yapmıyor


3
soru başlığını daha anlamlı bir şeyle değiştirebilir misin?
tokland

7
Ayrıca soru bir veya iki cümle olabilirdi. Bunun yaklaşık% 80'i başıboş.
Dennis Williamson

Yanıtlar:


63

Gönderen zip (1) :

Mevcut bir zip arşivinin adı verildiğinde, zip, zip arşivindeki aynı adlandırılmış girdileri değiştirecek veya yeni adlar için girdiler ekleyecektir.

Bu nedenle zip, yalnızca tek bir dosyayı içeren yeni bir .zip dosyası oluşturmak için normalde yaptığınız gibi komutu kullanın, tek fark, belirttiğiniz .zip dosya adının mevcut arşiv olacaktır.


5
Biri bir örnek verebilir mi lütfen? Zip komutunun yardımını anlamıyorum.
Gustave

12
Diyelim ki zip -r myfolder.zip myfoldergüncellemek myfolder/otherfolder/myfile.txt, devam etmek ve dosyayı düzenlemek ve çalıştırmak istiyorsanız klasörümü sıkıştırdığınızı varsayalımzip -r myfolder.zip myfolder/otherfolder/myfile.txt
eakkas

1
Değiştirilecek dosya aynı ada veya değiştirilecek dosya ile aynı yapıya sahip değilse bu nasıl yapılır?
Fractaliste

2
@Fractaliste Aynı isim ve yapıya sahip olmasını sağlamalısınız;)
Hack5

75

Linux zipdosyasını bir zip içindeki tek bir dosyayı değiştirmek için kullanışsız buldum . jarJava Development Kit dan yarar kolay olabilir. WEB/web.xmlBir JAR dosyasında (sadece bir zip dosyası olan) genel güncelleme görevini düşünün :

jar -uf path/to/myapp.jar -C path/to/dir WEB-INF/web.xml

Burada, path/to/dirdizini içeren WEB-INF(sırayla içeren web.xml) bir dizinin yoludur .


WEB-INFo dosyaya sahip bir yönetmen oluşturmak yerine sadece dosyayı kopyalamam gerekirse ne olur ?
Yardım eli

Ayrıca benim durumumda, sevgili eski "kavanoz" hile yaptı! Teşekkürler!
bitfox

52

Takip etmeyi dene:

zip [zipfile] [file to update] 

Bir örnek:

$ zip test.zip test/test.txt
updating: test/test.txt (stored 0%)

2
Örnek sayesinde anlaşılması en kolay olanı bu, teşekkürler!
vatsug

2
Zip içindeki bir dosyayı güncellemek istiyorsanız updating:bunun yerine görmeniz gerektiğini dikkate alın adding:; aksi takdirde zip'e dosya ekliyorsunuz, onu değiştirmiyorsunuz.
Edenshaw

Haklısın, bunu fark etmedim. Güncellendi, teşekkürler!
WizardsOfWor

13

Bunun eski soru olduğunu biliyorum, ama ben de aynısını yapmak istedim. Zip arşivindeki bir dosyayı güncelleyin. Ve yukarıdaki cevapların hiçbiri bana gerçekten yardımcı olmadı.

İşte yaptığım şey. Geçici dizin oluşturuldu abc. Kopyalanan file.zipiçin abcve bu dizinde dosyayı çıkarılan. Düzenlemek istediğim dosyayı düzenledim. Sonra abciçerideyken aşağıdaki komutu çalıştırdım

user@host ~/temp/abc $ zip -u file.zip
updating: content/js/ (stored 0%)
updating: content/js/moduleConfig.js (deflated 69%)

-u switch, değiştirilen / yeni dosyaları arayacak ve zip arşivine ekleyecektir.


12

Güncelleme bayrağını kullanın: -u

Misal:

zip -ur existing.zip myFolder

Bu komut sıkıştırmak ve katacak myFolder(ve içeriği özelliğidir) existing.zip.


Gelişmiş Kullanım:

Güncelleme bayrağı aslında gelen dosyaları var olanlarla karşılaştırır ve yeni dosyalar ekler veya mevcut olanları günceller.

Bu nedenle, zip dosyası içinde belirli bir alt dizin eklemek / güncellemek istiyorsanız, kaynağı istediğiniz gibi güncellemeniz ve ardından tüm kaynağı -ubayrakla yeniden sıkıştırmanız yeterlidir. Yalnızca değiştirilen dosyalar sıkıştırılacaktır.

Kaynak dosyalara erişiminiz yoksa, zip dosyasını açabilir, ardından istediğiniz dosyaları güncelleyebilir ve ardından -u bayrakla . Yine, yalnızca değiştirilen dosyalar sıkıştırılacaktır.

Misal:

Orijinal Kaynak Yapısı


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt

Güncellenmiş Kaynak Yapısı


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt 
│   │   ├── logs4.txt <-- NEW FILE 

Kullanım

$ zip -ur existing.zip ParentDir 
> updating: ParentDir/ChildDir/Logs (stored 0%)
>   adding: ParentDir/ChildDir/Logs/logs4.txt (stored 96%)


1

Zip dosyasını yenileyecek -f seçeneği de vardır. Zip oluşturulduğundan beri güncellenen TÜM dosyaları güncellemek için kullanılabilir (zip dosyası içinde ağaç yapısı içinde aynı yerde olduklarını varsayarak).

Dosyanızın adı /myfiles/myzip.zip ise tek yapmanız gereken

zip -f /myfiles/myzip.zip

0

ZIP arşiv yapısının yanından - zip dosyasını yeniden sıkıştırmadan güncelleyebilirsiniz, sadece değiştirmeniz gereken dosyadan önceki tüm dosyaları atlamanız, ardından güncellenmiş dosyanızı ve ardından geri kalan dosyaları koymanız gerekir. Ve son olarak, güncellenmiş merkezi dizin yapısını koymanız gerekecek. Ancak, en yaygın araçların bunu yapmanıza izin vereceğinden şüpheliyim.


0

7zip (7za) dosyaları / dizinleri güzelce eklemek / güncellemek için kullanılabilir:

Örnek:MANIFEST.MF Dosyayı bir JAR dosyasında (dosya tarihinden bağımsız olarak) değiştirmek . /source/META-INFDizin içeriyor MANIFEST.MFiçine koymak istediğiniz dosyayı jar(zip):

7za a /tmp/file.jar /source/META-INF/

Yalnızca güncelle (kaynak daha eskiyse hedefin yerini almaz)

7za u /tmp/file.jar /source/META-INF/

-2

Evet mümkün.

linux tabanlı sistemlerde sadece zip'i kurun ve komut satırından çağırabilirsiniz. kılavuz sayfasına bir göz atın: http://linux.die.net/man/1/zip

ancak kişisel deneyimime göre, eğer mümkünse ve sıkıştırma o kadar önemli değilse, bu, düz tar dosyaları ve tar ile daha iyi çalışır.

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.