Como compactar vários arquivos em um único arquivo gz?

74

Eu tenho 100 arquivos: cvd1.txt, cvd2.txt...cvd100.txt

Como gzip100 arquivos em um único .gzarquivo, para que, depois gunzipdele, eu deveria ter cvd1.txt, cvd2.txt... cvd100.txtseparadamente?

Tony
fonte

Respostas:

40

se você tiver zip,

zip myzip.zip cvd*.txt

Não precisa tardeles primeiro.


fonte
11
@ Kurumi- Os programas do Windows, como o Winzip ou o 7-zip, reconhecem arquivos .zip?
11
@Tony. Eu acredito que eles fazem. Testei a versão 7-zip linux com zip e consegui extrair. Se você quiser, também há o GNU zip para windows.
Você perde zgrep, zcmp, zdiffe todos os tipos de ferramentas que podem trabalhar em tubos por sua escolha de um formato não-streamable chamado zip. Usuários avançados usam tubos.
Tankman六四
83

Você deseja tarseus arquivos juntos e gzipo arquivo tar resultante.

tar cvzf cvd.tar.gz cvd*.txt

Para descompactar o arquivo tar gzip'd, você faria:

tar xvzf cvd.tar.gz -C /path/to/parent/dir

Isso extrairia seus arquivos no /path/to/parent/dirdiretório

SiegeX
fonte
6
se você nomear o arquivo com a extensão .tgz, (abreviação de tar gz), os programas do Windows o reconhecerão como algo que o winzip etc. pode processar como está. Parabéns ao SiegeX pelos seus 10K!
shellter 29/03
23

Você vai querer usar o tar, assim:

tar -czvf file.tar.gz cvd*.txt

tar coloca os arquivos juntos, enquanto o gzip executa a compactação.

A página de manual do gzip:

Se você deseja criar um único arquivo morto com vários membros para que os membros possam ser extraídos posteriormente independentemente, use um arquivador como tar ou zip. O GNU tar suporta a opção -z para chamar o gzip de forma transparente. O gzip foi projetado como um complemento para o alcatrão, não como um substituto

Dan Fego
fonte
13

O gzip, por si só, não sabe nada sobre a estrutura de arquivos. Para fazer o que você deseja, primeiro você precisa colocar os arquivos em algum tipo de arquivo contêiner (por exemplo, uma estrutura tar ou similar) e depois compactá-lo. tar possui z e j (para bzip2) alterna nas plataformas GNU para fazer isso.

Joe
fonte
2
A opção é realmente 'z' ('x' é para extração). Bom, você mencionou 'j' / bzip2 - compressão muito mais rígida.
5

Você pode fazer isso usando:

gzip my_final_filename.gz my_first_file my_second_file ... my_last_file

gunzip my_final_filename.gz

ou

zip my_final_filename.zip my_first_file my_second_file ... my_last_file

unzip my_final_filename.gz

ou

tar cvzf my_final_filename.tar.gz my_first_file my_second_file ... my_last_file

tar -czvf my_final_filename.tar.gz
Vahid F
fonte
Eu não acho que seu primeiro comando funcione. Pelo menos geralmente. Se funcionar para um shell específico, você deve indicá-lo. Eu teria voto negativo se tivesse representante suficiente.
DPM
@DPM está certo, os gzip/gunzipcomandos não funcionaram, ele retornará o errogzip: my_final_filename.gz: No such file or directory
Bilal
1

Para compactar vários arquivos com padrões diferentes, poderíamos:

tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json

isso adicionará todos os arquivos .yml que começam com Alice de qualquer subdiretório e todos os arquivos .json que começam com Bob de qualquer subdiretório.

Sairam Krish
fonte
Já respondi em superuser.com/a/334830/107419
prayagupd 23/03