O comando Unix zip está atualizando o arquivo existente em vez de criar um novo [duplicado]

5
$(which zip) -r ../data.zip .

O conteúdo das pastas está mudando dinamicamente ao longo do tempo, testei-o primeiro com a inclusão do arquivo huge.pdf e depois o excluí, mas ainda data.zip permanece do mesmo tamanho. Ao descompactar, pude ver o arquivo huge.pdf lá.

Eu desejo que o comando zip substitua completamente o arquivo existente.

e estou executando este comando shell em um aplicativo (nodejs)

Editar: não acho que a pergunta vinculada seja duplicada.

    
por user2727195 29.07.2016 / 22:12

2 respostas

6

Primeiro, observe que executar zip a $(which zip) é o mesmo que executar apenas zip . O utilitário which localiza um arquivo de programa no caminho do usuário.

Dado um arquivo Zip existente, zip irá adicionar novos arquivos, substituir os arquivos existentes, mas não excluir os arquivos no arquivar se esses arquivos foram removidos do sistema de arquivos.

Para excluir um arquivo de um arquivo Zip:

$ zip -d archive.zip filename

Você pode, obviamente, apenas remover o arquivo com rm antes de recriá-lo.

Para o seu script NodeJS, você pode usar

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

O sinal -f to rm faz com que rm não falhe se o arquivo não existir.

    
por 29.07.2016 / 22:25
1

Como ele informa a entrada de ajuda do comando zip :

The default action is to add or replace zipfile entries from list

Isso explica por que o comportamento padrão não envolve a exclusão de arquivos no zipfile e o motivo pelo qual huge.pdf permanece nele.

Se você quiser substituir completamente o arquivo existente, poderá criar um novo arquivo zip temporário e substituir o anterior. Além disso, a invocação do comando which não parece ser necessária, portanto, o comando deve ser o seguinte:

zip -r temp.zip . ; mv temp.zip ../data.zip
    
por 29.07.2016 / 22:37

Tags