Como sobrescrever um arquivo zip existente em vez de atualizá-lo no Info-Zip?


29

Para obter um novo arquivo zip assim como o tar, preciso executar rm foo.zipantes de executar 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

Respostas:


30

Use a opção -FS para "sincronização de arquivos"

zip -FSr foo.zip foo

Isso adicionará novos arquivos na pasta ao zip e excluirá os arquivos do zip que não estiverem na pasta.


Qual versão do zip tem essa opção? Meu comando zip não reconhece "-S"
Jayan

2
O interruptor -FSnão é -Fe -Sjuntos. Isso está lá desde o zip 3.0, pelo menos. Verifique man zip.
Paul

Como o "novo arquivo" é definido? Suas mudanças no tamanho do arquivo, data de modificação, ambos? Apenas curioso
Moseleyi

Isso só funciona Zip 3.0e não funciona Zip 2.32(não removeu arquivos antigos em zip pack)
Nabi KAZ

0

Uma alternativa para usar a -FSopção (ou excluir o arquivo ZIP antigo) e, literalmente, sobrescrever o arquivo ZIP existente, é solicitar zipa saída para stdin e redirecionar a saída para o arquivo de sua escolha:

zip -r - foo >foo.zip

Se o foo.zip existir, ele será substituído pelo redirecionamento do shell, o que significa que você obterá um novo arquivo ZIP novo 100% do tempo, todas as vezes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.