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
asari
sumber

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.

Paul
sumber
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 🙂

mxxk
sumber
Maksud Anda keluaran ke stdout
flarn2006