Unix zip 명령은 새 아카이브를 생성하는 대신 기존 아카이브를 업데이트합니다.

Unix zip 명령은 새 아카이브를 생성하는 대신 기존 아카이브를 업데이트합니다.
$(which zip) -r ../data.zip .

폴더의 내용은 시간이 지남에 따라 동적으로 변경되므로 huge.pdf먼저 포함 파일로 테스트한 다음 제거했지만 여전히 data.zip동일한 크기를 유지했습니다. 압축을 풀면 huge.pdf거기에 있는 파일을 볼 수 있습니다 .

zip 명령으로 기존 아카이브를 완전히 덮어쓰고 싶습니다.

내 애플리케이션(nodejs)에서 이 셸 명령을 실행하고 있습니다.

편집: 연결된 질문이 중복된 것 같지 않습니다.

답변1

먼저 zipthrough 실행은 $(which zip)as 실행과 동일하다는 점에 유의하세요 zip. 이 which유틸리티는 사용자 경로에서 프로그램 파일을 찾습니다.

기존 Zip 아카이브가 주어 zip지면다음에 추가새로운 파일,바꾸다기존 파일이지만 그렇지 않습니다.삭제파일 시스템에서 삭제된 경우 아카이브의 파일입니다.

Zip 아카이브에서 파일을 삭제하려면:

$ zip -d archive.zip filename

물론 rm아카이브를 다시 생성하기 전에 삭제할 수도 있습니다.

NodeJS 스크립트의 경우 다음을 사용할 수 있습니다.

rm -f ../data.zip && zip -r ../data.zip .

아카이브가 존재하지 않는 경우에도 이 플래그는 실패 -f하지 않습니다 .rmrm

답변2

zip명령의 도움말 항목에 나와 있듯이 다음과 같습니다.

기본 동작은 다음과 같습니다.추가 또는 교체목록의 zip 파일 항목

huge.pdf이는 기본 동작이 zip 파일의 파일 삭제를 포함하지 않는 이유와 해당 파일이 그대로 유지되는 이유를 설명합니다.

기존 아카이브를 완전히 덮어쓰려면 새 임시 zip 파일을 만들고 이전 파일을 바꿀 수 있습니다. 또한 which명령 호출이 필요하지 않은 것 같으므로 명령은 다음과 같아야 합니다.

zip -r temp.zip . ; mv temp.zip ../data.zip

관련 정보