Apakah mungkin untuk mengganti file dalam file zip tanpa membuka ritsleting, menghapus file lama, menambahkan file baru dan mengembalikannya?
Alasannya adalah saya memiliki file zip yang sangat besar, ada satu xml di dalam file zip yang terkadang harus saya perbarui. Membuka zip dan membukanya kembali membutuhkan waktu lama. Jadi saya hanya ingin mengganti satu xml di dalam zip melalui skrip. Saya sudah memeriksa pembaruan pada xml yang saya miliki.
Jadi apakah mungkin hanya mengganti satu xml tanpa membuka ritsleting dan membuat ritsleting ulang?
Maaf saya akan menggunakan perintah zip untuk melakukan hal-hal seperti itu tetapi masalahnya adalah skrip sebenarnya untuk ponsel android dan zip bukan perintah yang dapat saya gunakan sayangnya maaf saya meninggalkannya. Saya akan menggunakan zip dengan pasti jika saya bisa tetapi saya hanya memiliki unzip untuk droid dan kemudian ada tar di busybox tetapi tar tidak melakukan apa yang saya butuhkan
Jawaban:
Dari zip (1) :
Jadi gunakan saja
zip
perintah seperti biasa untuk membuat file .zip baru yang hanya berisi satu file itu, kecuali nama file .zip yang Anda tentukan akan menjadi arsip yang ada.sumber
zip -r myfolder.zip myfolder
jika Anda ingin memperbaruimyfolder/otherfolder/myfile.txt
, lanjutkan dan edit file dan jalankanzip -r myfolder.zip myfolder/otherfolder/myfile.txt
Saya telah menemukan
zip
file Linux menjadi rumit untuk mengganti satu file dalam zip. Thejar
utilitas dari Java Development Kit mungkin lebih mudah. Pertimbangkan tugas umum untuk memperbaruiWEB/web.xml
file JAR (yang hanya berupa file zip):Di sini,
path/to/dir
adalah jalur ke direktori yang berisiWEB-INF
direktori (yang pada gilirannya berisiweb.xml
).sumber
WEB-INF
yang memiliki file itu.Coba yang berikut ini:
Sebuah contoh:
$ zip test.zip test/test.txt updating: test/test.txt (stored 0%)
sumber
updating:
bukanadding:
jika Anda ingin memperbarui file dalam zip; jika tidak, Anda menambahkan file ke zip, bukan menggantinya.Saya tahu ini pertanyaan lama, tetapi saya ingin melakukan hal yang sama. Perbarui file dalam arsip zip. Dan tidak ada jawaban di atas yang benar-benar membantu saya.
Inilah yang saya lakukan. Direktori temp dibuat
abc
. Disalinfile.zip
keabc
dan diekstrak file dalam direktori tersebut. Saya mengedit file yang ingin saya edit. Kemudian saat sedang masukabc
, jalankan perintah berikut-u
switch akan mencari file yang diubah / baru dan akan menambah arsip zip.sumber
Gunakan bendera pembaruan:
-u
Contoh:
Perintah ini akan memampatkan dan menambahkan
myFolder
(dan isinya) ke fileexisting.zip
.Penggunaan Lanjutan:
Bendera pembaruan sebenarnya membandingkan file yang masuk dengan yang sudah ada dan akan menambahkan file baru, atau memperbarui yang sudah ada.
Oleh karena itu, jika Anda ingin menambah / memperbarui subdirektori tertentu dalam file zip, cukup perbarui sumber sesuai keinginan, lalu zip ulang seluruh sumber dengan
-u
bendera. Hanya file yang diubah yang akan dizip.Jika Anda tidak memiliki akses ke file sumber, Anda dapat mengekstrak file zip tersebut, lalu memperbarui file yang diinginkan, dan kemudian melakukan zip ulang dengan
-u
bendera tersebut. Sekali lagi, hanya file yang diubah yang akan di-zip.Contoh:
Struktur Sumber Asli
Struktur Sumber Diperbarui
Pemakaian
sumber
Anda dapat menggunakan: zip -u file.zip path / file_to_update
sumber
Ada juga opsi -f yang akan menyegarkan file zip. Ini dapat digunakan untuk memperbarui SEMUA file yang telah diperbarui sejak zip dibuat (dengan asumsi mereka berada di tempat yang sama dalam struktur pohon dalam file zip).
Jika file Anda bernama /myfiles/myzip.zip, yang harus Anda lakukan adalah
sumber
Dari sisi struktur arsip ZIP - Anda dapat memperbarui file zip tanpa mengompresnya kembali, Anda hanya perlu melewati semua file yang sebelumnya dari file yang perlu Anda ganti, lalu meletakkan file yang telah diperbarui, dan kemudian file lainnya. Dan akhirnya Anda harus meletakkan struktur direktori pusat yang diperbarui. Namun, saya ragu bahwa alat yang paling umum akan memungkinkan Anda membuat ini.
sumber
7zip
(7za) dapat digunakan untuk menambah / memperbarui file / direktori dengan baik:Contoh: Mengganti (terlepas dari tanggal file)
MANIFEST.MF
file dalam file JAR. The/source/META-INF
direktori berisiMANIFEST.MF
file yang Anda ingin menempatkan ke dalamjar
(zip):7za a /tmp/file.jar /source/META-INF/
Hanya perbarui (tidak menggantikan target jika sumbernya lebih lama)
7za u /tmp/file.jar /source/META-INF/
sumber
iya itu mungkin.
pada sistem berbasis linux cukup instal zip dan Anda dapat memanggilnya di baris perintah. lihat di halaman manual: http://linux.die.net/man/1/zip
tetapi dalam pengalaman pribadi saya, jika memungkinkan dan kompresi tidak begitu penting, ini bekerja lebih baik dengan file tar dan tar biasa.
sumber