จะเขียนทับไฟล์ zip ที่มีอยู่แทนที่จะอัพเดทใน Info-Zip ได้อย่างไร?


28

เพื่อให้ได้ไฟล์ zip ใหม่เหมือนที่ tar ทำฉันต้องทำ rm foo.zip ก่อนดำเนินการ 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

คำตอบ:


29

ใช้ตัวเลือก -FS เพื่อ "ซิงค์ไฟล์"

zip -FSr foo.zip foo

การดำเนินการนี้จะเพิ่มไฟล์ใหม่ใด ๆ ในโฟลเดอร์ลงในไฟล์ zip และลบไฟล์ใด ๆ จากไฟล์ซิปที่ไม่ได้อยู่ในโฟลเดอร์


zip เวอร์ชันใดมีตัวเลือกนี้ คำสั่ง zip ของฉันไม่รู้จัก "-S"
Jayan

2
สวิตช์เป็น -FS ไม่ -F และ -S ด้วยกัน. สิ่งนี้มีมาตั้งแต่ zip 3.0 เป็นอย่างน้อย ตรวจสอบ man zip.
Paul

มีการกำหนด "ไฟล์ใหม่" อย่างไร การเปลี่ยนแปลงขนาดไฟล์วันที่แก้ไขทั้งสอง? แค่สงสัย
Moseleyi

0

ทางเลือกในการใช้ -FS ตัวเลือก (หรือลบไฟล์ ZIP เก่า) และแท้จริง เขียนทับ ไฟล์ ZIP ที่มีอยู่คือการถาม zip เพื่อส่งออกไปยัง stdin และเปลี่ยนเส้นทางไปยังไฟล์ที่คุณเลือก

zip -r - foo >foo.zip

หาก foo.zip มีอยู่มันจะถูกเขียนทับโดยการเปลี่ยนเส้นทางของเชลล์ซึ่งหมายความว่าคุณจะได้รับไฟล์ ZIP ใหม่ 100% ทุกครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.