Làm cách nào để ghi đè tệp zip hiện có thay vì cập nhật tệp trong Info-Zip?


30

Để có được một tệp zip mới giống như tar, tôi có phải thực hiện rm foo.ziptrước khi thực hiện zipkhông?

$ 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

Câu trả lời:


32

Sử dụng tùy chọn -FS để "đồng bộ hóa tệp"

zip -FSr foo.zip foo

Điều này sẽ thêm bất kỳ tệp mới trong thư mục vào zip và xóa bất kỳ tệp nào khỏi zip không có trong thư mục.


Phiên bản nào của zip có tùy chọn này? Lệnh zip của tôi không nhận ra "-S"
Jayan

2
Việc chuyển đổi là -FSkhông -F-Scùng nhau. Điều này đã có ở đó kể từ zip 3.0 ít nhất. Kiểm tra man zip.
Paul

"Tập tin mới" được định nghĩa như thế nào? Nó thay đổi kích thước tập tin, ngày sửa đổi, cả hai? Chỉ tò mò
Moseleyi

Điều này chỉ hoạt động Zip 3.0và không hoạt động Zip 2.32(không xóa các tệp cũ trong gói zip)
Nabi KAZ

Ý bạn là -FS -rđúng không?
tuyết lở1

0

Một cách khác để sử dụng -FStùy chọn (hoặc xóa tệp ZIP cũ) và ghi đè lên tệp ZIP hiện tại theo nghĩa đen , là yêu cầu zipxuất ra stdin và chuyển hướng đầu ra sang tệp bạn chọn:

zip -r - foo >foo.zip

Nếu foo.zip tồn tại, nó sẽ bị ghi đè bởi chuyển hướng shell, nghĩa là bạn sẽ nhận được một tệp ZIP mới 100% mọi lúc, mọi lúc


Bạn có nghĩa là đầu ra cho thiết bị xuất chuẩn
flarn2006
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.