Info-Zip에서 기존 zip 파일을 업데이트하는 대신 덮어 쓰는 방법은 무엇입니까?


30

tar처럼 새로운 zip 파일을 얻으려면 실행 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

답변:


32

-FS 옵션을 사용하여 "파일 동기화"

zip -FSr foo.zip foo

그러면 폴더의 새 파일이 zip에 추가되고 zip에서 폴더에없는 파일이 삭제됩니다.


이 옵션이있는 zip 버전은 무엇입니까? 내 우편 명령이 "-S"를 인식하지 못함
Jayan

2
스위치는 -FS하지 -F-S함께. 이것은 zip 3.0 이후로 존재했습니다. 확인하십시오 man zip.
Paul

"새 파일"은 어떻게 정의됩니까? 파일 크기 변경, 수정 날짜, 둘 다? 그냥 궁금해
Moseleyi

이것은 단지 작동 Zip 3.0하고 작동 하지 않습니다 Zip 2.32(zip 팩에서 오래된 파일을 제거하지 않았습니다)
Nabi KAZ

당신은 -FS -r그렇습니까?
눈사태 1

0

-FS옵션 을 사용 하거나 기존 ZIP 파일을 삭제 하는 대신 문자 그대로 기존 ZIP 파일을 덮어 쓰는 대안 은 zipstdin으로 출력하도록 요청 하고 출력을 선택한 파일로 리디렉션하는 것입니다.

zip -r - foo >foo.zip

foo.zip이 존재하는 경우, 쉘 재 지정으로 겹쳐 쓰여집니다. 즉, 매번 100 % 새로운 zip 파일을 얻습니다.


stdout에 출력을 의미합니다
flarn2006
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.