Adicionando arquivos descompactados a uma pasta compactada

32

Estou tentando adicionar arquivos descompactados a uma pasta já compactada, digamos new folder.zip. É possível usar zip -r new folder.zipdepois de adicionar alguns arquivos descompactados a eles? Esse comando compactará a pasta? Existe alguma alternativa para fazer isso?

vaia na
fonte
você pode canalizar, descompacte o arquivo original | feche o conteúdo inteiro como você criaria um arquivo totalmente novo. Não sei como você faria isso com um único comando.
Unixmiah

Respostas:

44

Use o sinalizador de atualização: -u

Exemplo:

zip -ur existing.zip myFolder

Este comando irá compactar e adicionar myFolder(e seu conteúdo) ao arquivo existing.zip.


Uso avançado:

O sinalizador de atualização realmente compara os arquivos recebidos com os existentes e adiciona novos arquivos ou atualiza os existentes.

Portanto, se você deseja adicionar / atualizar um subdiretório específico dentro do arquivo zip, atualize a fonte conforme desejado e, em seguida, remova novamente a fonte inteira com o -usinalizador. Somente os arquivos alterados serão compactados.

Se você não tiver acesso aos arquivos de origem, poderá descompactar o arquivo zip, atualizar os arquivos desejados e depois compactar novamente com o -usinalizador. Novamente, apenas os arquivos alterados serão compactados.

Exemplo:

Estrutura original da fonte


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt

Estrutura de origem atualizada


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt 
│   │   ├── logs4.txt <-- NEW FILE 

Uso

$ zip -ur existing.zip ParentDir 
> updating: ParentDir/ChildDir/Logs (stored 0%)
>   adding: ParentDir/ChildDir/Logs/logs4.txt (stored 96%)
Ethan Strider
fonte
Obrigado! Como posso especificar a pasta no zip para adicioná-la?
Aaron Esau
Adicionei uma seção para responder sua pergunta. :)
Ethan Strider
0

Eu acredito que você pode adicionar arquivos usando este comando:

zip -r zipfile.zip newfile.txt newfile1.txt

A -ropção do comando zip permite adicionar arquivos.

ryekayo
fonte
-ré uma opção recursiva.
Ctrl-alt-delor
@ Richard, eu vou consertar isso. Dê-me alguns
ryekayo 13/10
@ Richard, despeja a fonte que eu tenho que partir diz que você pode usar o comando -r para modificar um arquivo compactado existente: linuxnix.com/2014/05/...
ryekayo
2
add - Atualiza entradas existentes e adiciona novos arquivos. Se o arquivo não existir, crie-o. Este é o modo padrão. (nenhuma opção é necessária para substituir ou adicionar arquivos. -rpode ser usada se você adicionar diretórios ou quando não estiver adicionando diretórios. Bem, sempre que você não quiser apenas adicionar o diretório e nenhum conteúdo, praticamente o tempo todo Portanto, em resumo, o exemplo está correto, mas a explicação está errada.) (Melhor testá-lo, essa é apenas a minha interpretação do manual).
Ctrl-alt-delor 13/10
2
Por motivos de segurança, TEM CERTEZA que deseja modificar um arquivo existente? Em vez disso, eu pelo menos faria uma cópia de segurança, faria a adição e depois verificaria novamente a integridade do arquivo antes de confirmar o novo.
Mdpc # 13/14
0

O sinalizador -u funciona para arquivos

zip -ur zip_to_upload.zip file_to_add.txt

Saudações

David Lopes
fonte
0

Eu usei com sucesso o zipcomando. com a opção grow (-g), para adicionar uma subpasta folder1/folder2contendo os arquivos fileA.txte fileB.txt:

zip -gr folder.zip folder1/folder2

-r significa recurs dir.

Pelo meu entendimento, -g deve aumentar os arquivos zip, não criando um novo arquivo zip (que pode ser útil em arquivos zip muito grandes). Em caso de problemas, você pode primeiro tentar criar subpastas em folder.zip com (por exemplo):

zip -g folder.zip folder1
zip -g folder.zip folder2
Fabiano Tarlao
fonte
0

Se você tiver muitos arquivos no mesmo local que o seu arquivo zip e quiser copiar todos eles no arquivo morto, poderá:

zip -ur zipfile.zip !(zipfile.zip)

Isso atualiza seu arquivo zip (a -uopção) recursivamente ( -ropção) com todos os arquivos encontrados, exceto o próprio arquivo zip ( !é a negação do arquivo zip )

Em seguida, você pode simplesmente excluir todos os arquivos, exceto o arquivo zip, seguindo a mesma regra acima:

rm !(zipfile.zip)
despina
fonte