Bagaimana cara menimpa file zip yang ada daripada memperbaruinya di Info-Zip?


30

Untuk mendapatkan file zip baru seperti tar, apakah saya harus melakukan rm foo.zipsebelum menjalankan zip?

$ mkdir foo; touch foo/bar
$ zip -r foo.zip foo
  adding: foo/ (stored 0%)
  adding: foo/bar (stored 0%)
$ rm foo/bar; touch foo/baz
$ zip -r foo.zip foo
  adding: foo/ (stored 0%)
  adding: foo/baz (stored 0%)
$ unzip -l foo.zip
Archive:  foo.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2011-10-27 07:49   foo/
        0  2011-10-27 07:49   foo/bar
        0  2011-10-27 07:49   foo/baz
---------                     -------
        0                     3 files

Jawaban:


32

Gunakan opsi -FS untuk "file sync"

zip -FSr foo.zip foo

Ini akan menambahkan file baru di folder ke zip, dan menghapus file dari zip yang tidak ada di folder.


Versi zip mana yang memiliki opsi ini? Perintah zip saya tidak mengenali "-S"
Jayan

2
Switchnya -FStidak -Fdan -Sbersama - sama. Ini sudah ada sejak zip 3.0 setidaknya. Periksa man zip.
Paul

Bagaimana "file baru" didefinisikan? Fileize-nya berubah, tanggal diubah, keduanya? Hanya ingin tahu
Moseleyi

Ini hanya bekerja untuk Zip 3.0dan tidak bekerja untuk Zip 2.32(tidak menghapus file lama dalam paket zip)
Nabi KAZ

Maksudmu -FS -rbenar?
avalanche1

0

Alternatif untuk menggunakan -FSopsi (atau menghapus file ZIP lama), dan secara harfiah menimpa file ZIP yang ada, adalah meminta zipoutput ke stdin dan mengarahkan output ke file pilihan Anda:

zip -r - foo >foo.zip

Jika foo.zip ada, itu akan ditimpa oleh pengalihan shell, artinya Anda akan mendapatkan file ZIP baru yang baru 100% setiap saat, setiap kali 🙂


Maksud Anda keluaran ke stdout
flarn2006
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.