Bir zip dosyasının içindeki dosyaları ilk önce açıkça ayıklamadan düzenlemenin bir yolu var mı?


47

Bazen bir .zip veya .jar dosyasında değişiklikler yapmam gerekir, bu yüzden genellikle dosyayı taşırım, /tmptüm dosyaları çıkartırım unzip, birkaç dosyayı düzenlerim ve sonra dosyaları yeniden sıkıştırırım. Bu işe yarar, ama can sıkıcı olabilir. Bir zip dosyasının içindeki bir dosyayı açıkça çağırmadan unzipve zip(bu komutların etrafındaki sarmalayıcı olsa bile) düzenlemek için kullanabileceğim bir yardımcı program veya kabuk betiği var mı?


Cevabı sadece .jar dosyaları üzerinde çalışıyorsa merak ediyorum? (Orada test etmedim.)
beroe

@ beroe Bu, zip sıkıştırma algoritmasını kullandığından beri gerekir. Bu aslında bir çözüm arayışımın temel motivasyonuydu çünkü bir uygulama sunucusunda yeniden savaşmak ve sadece tek bir dosyayı değiştirmek için yeniden dağıtmak istemedim .war dosyalarım vardı.
austin

Harika. İşlevi düzeltmeyi deneyeceğim, böylece arşiv içindeki dizin yapısını koruyacak. Şu anda sadece root seviyesinde dosyalar üzerinde çalıştığını düşünüyorum, fakat amaçlarım için alt klasörler daha faydalı.
beroe 24:13

@ beroe Bu çok hoş. Bunu sormadan önce, rasgele komutları yürütmek için zip dosyası içinde "psudo-shell" i başlatmak için bir python betiğini kodlayacaktım. Neler bulduğunla ilgileniyorum.
austin

Tamam, alt klasörleri desteklemek için başka bir çözüm eklendi ve sınırlı testlerde çalışıyor .
beroe 24:13

Yanıtlar:


19

Açmadan önce arşivdeki dosyanın adını biliyor musunuz? Zip'i açmak /tmp, düzenlemek ve yenilemek için bir işlev yapabilirsiniz :

zipedit(){
    echo "Usage: zipedit archive.zip file.txt"
    unzip "$1" "$2" -d /tmp 
    vi /tmp/$2 && zip -j --update "$1"  "/tmp/$2" 
}

Söylediği gibi kullanım:

zipedit myarchive.zip myfile.txt

Bu, adlandırılmış dosyayı arşivden çıkarır, kaydeder /tmp, düzenler ve visonra yolu "önemsiz bırakırken" arşive geri ekler. .Bash_profile hesabınıza ekleyin, varsayarak bash...

DÜZENLEME: Aşağıda klasörün (yani kullanmak adına önce eğik çizgi kullanmayın, arşiv ... Not içindeki alt klasörler ile çalışan bir versiyonudur myfolder/file.txtdeğil /myfolder/file.txt). Arşivde olmayan bir dosyayı düzenlerseniz, sizin için yaratacaktır. Ayrıca zip dosyasının mutlak yoluyla çalışıp çalışmayacağından da emin değilsiniz. Akraba ile en iyi sopa.

zipedit(){
    echo "Usage: zipedit archive.zip folder/file.txt"
    curdir=$(pwd)
    unzip "$1" "$2" -d /tmp 
    cd /tmp
    vi "$2" && zip --update "$curdir/$1"  "$2" 
    # remove this line to just keep overwriting files in /tmp
    rm -f "$2" # or remove -f if you want to confirm
    cd "$curdir"
}

Soru için teşekkürler. Muhtemelen bunu da kullanacağım!

Başka bir düzenleme: Denenmemiş, ancak bunu okudum vimve emacsher ikisi de doğrudan jar dosyalarını düzenleyecek mi?


Vim'in Linux'taki komut satırından zip dosyalarını düzenlemek için mükemmel çalıştığını onaylayabilirim.
Thomas Bindzus

59

Vim, zip dosyalarındaki dosyaları şeffaf bir şekilde düzenlemeyi destekler. Sadece yürütün:

vim file.zip

ve zip arşivindeki dosyaların bir listesi gösterilecektir. Düzenlemek istediğinizi seçin, istediğinizi değiştirin ve şununla çıkın: x

vimCevap verirse :

Değişiklikler yapılamıyor, 'değiştirilebilir' kapalı

.. sadece çalıştırın :set modifiableveya :set ma(kaynak: https://stackoverflow.com/questions/5745506/vim-modifiable-is-off )


2
Bu arada, vim'deki varsayılan zip desteği yalnızca bir seviye ZIP'lerin düzenlenmesine izin verir. ZIP'leri ZIP'lerin içinde düzenlemeniz gerekirse, bu vim eklentisini kullanmalısınız .
jesjimher

1
Emacs ile aynı.
Mike

4
Bu doğru cevap olarak işaretlenmelidir
Martijn Burger

3
hayat kurtarıcı.
vim'in

4

Kısa cevap: NO.

Bir sarıcı konusuysa, olan bu komutları çağırarak. Neyse, düşünebildiğim en iyi şey, file-rollerbir X ortamındaysanız, kurulumunuza bağlı olarak basit bir çift tıklamayla işe yarayabilecek bir dosyayı kullanarak açmaktır. Daha sonra açmak için sıkıştırılmış dosyayı çift tıklatabilir ve sonra düzenleyebilirsiniz:

$ file-roller b3.zip 

Düzenlenmiş dosyanızı kaydettiğinizde şu iletişim kutusunu almalısınız:

Bunun için bir komut dosyası da yapabilirsiniz, ancak birden fazla dosya içeren sıkıştırılmış arşivleriniz varsa bu karmaşıklaşır. İhtiyacınız olan şey buysa, bir şeyler pişirebilir miyim?

görüntü tanımını buraya girin


0

Kısa bilgiçlikli cevap; Hayır. Sıkıştırma hakkında düşünürseniz, içindeki dosyaları kısaltmak için artıklık kullanıyorsunuzdur, bu nedenle herhangi bir düzenleme arşivdeki tüm dosyayı, muhtemelen arşivi değiştirir.

Daha az teorik, daha pratik, daha çok "Eğer elle açmak / zip çekmek istemiyorum" daha fazla kullanabileceğiniz araçlar vardır. Linux'ta ark kullandım. Arşivi ayrıca fuse zip ile de bağlayabilirsiniz , ancak bu geçici bir dosyadan daha fazladır.


Birinin neden -1 verdiğini bilmiyorum. İçin +1 fuse-zip.
efendim

0

İçin kılavuz sayfasına göre zip(kolay başvuru için çevrimiçi versiyon: http://linux.die.net/man/1/zip ), zipkomutun -utanımladığı bir bayrak vardır:

Zip arşivindeki mevcut bir girişi yalnızca zip arşivindeki sürümden daha yakın bir zamanda değiştirildiyse değiştirin (güncelleyin).


0

Dizin Opus 12 dosya yöneticisi, Zip'e göz atmanıza, ardından düzenlenen dosyayı başka bir klasörden sürükleyip bırakmanıza ve düzenlemek istediğiniz dosyanın üzerine yazmanıza izin verir ve bu işlemi anında gerçekleştirir. Çok kolay



0

Örneğin standart KDE metin editörünü kullanabilirsiniz:

  1. arşivi arşiv yöneticisinde aç
  2. metin dosyasını KDE gui editöründe aç
  3. metin dosyasını kaydedin ve sistem arşivi yenilemenizi isteyin - evet'i tıklayın
  4. arşiv izni ve klasör klasörü hakkında unutma (en sevdiğim hata)

Lütfen yayınınızdaki biçimlendirmeyi düzeltin.
davidbaumann
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.