Crie um arquivo com o comando "gzip"

11

Eu tenho que criar um arquivo com o comando gzip (não tar - é necessário) e o arquivo deve conter arquivos de outro diretório - por exemplo, / etc. Eu tentei usar o comando

gzip myetc.gz /etc

Mas não deu certo.

Elisia Light
fonte
3
gzipnão é zip. São ferramentas diferentes que funcionam de maneira diferente.
roaima 23/05
3
gzipé apenas compressor de fluxo. Não conhece arquivos ou diretórios.
3
Por que você não pode usar o alcatrão?
Marcelm
Se você não tem alcatrão, você tem cpio?
Rup 23/05
2
Você diz que deseja criar um arquivo, mas não pode usar o tar. Você sabe que parte da palavra "alcatrão" vem de "arquivo". Quero dizer, essa é a sua razão de ser. Quem ou o que gostaria de excluir "tar" de um processo de criação de arquivo? Basicamente, você está perguntando como acionar um parafuso com um martelo (não uma chave de fenda - é necessário).
Mike S

Respostas:

6

O Gzip funciona apenas com um único arquivo ou um fluxo de dados canalizado para o gzip. Então, primeiro você precisa gerar um arquivo, como o tar, e depois pode compactá-lo. A outra opção é compactar todos os arquivos individualmente e tar em um arquivo.

Ambas as soluções são estúpidas e não devem ser usadas. Você deve usar o tar com a opção de compactação incorporada e fazer tudo em um comando.

SPRBRN
fonte
1
Por que o primeiro método deve ser estúpido? Esta é a maneira usual para produzir .tar.gz...
rexkogitans
Bem, estúpido provavelmente não é o termo certo, mas em vez de usar o gzip, se você pode usar o tar com a opção c. É mais simples e não acredito que canalizar o tar para o gzip tenha uma vantagem.
SPRBRN
O gzip pode funcionar para vários arquivos com a opção -r, mas criará um novo .gz para cada arquivo na pasta.
Luciano Andress Martini
1
@rexkogitans - é estúpido da mesma maneira que cat filename | grep blahé estúpido. Também é muito abaixo do ideal, porque usaria um grande espaço intermediário. Eu não sei se eu chamaria isso de estúpido tanto quanto injustificado, subótimo e, geralmente, meio feio. Bem, trabalhos estúpidos também.
Mike S
Oh, agora eu vejo o que é tão estúpido. Não, o `tar -czf` é o caminho a seguir, pois não envolve um inútil fork().
Rexkogitans
13

gziptrabalha com arquivos, não diretórios. Portanto, para criar um arquivo morto de um diretório que você precisa usar tar(o que criará um único tarball de vários arquivos):

tar cvf myetc.tar /etc

ou, para um arquivo compactado com gzip:

tar cvzf myetc.tar.gz /etc
dr_
fonte
2
se alguém tem um sistema "antigo" sem a opção "-z", pode fazer: cd / ; tar cf - ./etc | gzip -c - > myetc.tar.gz (se você está se perguntando por que eu tar "./etc" em vez de "/ etc", é porque nesses sistemas mais antigos, ao usar o tar xvf, ele irá para / etc e o substituirá ... [ou você terá que usar "pax" nesse caso]). Comando inverso, isto é, para extrair esse arquivo sob "/ algures": cd /somewhere ; gzip -dc < /the/location/of/myetc.tar.gz | tar xvf -
Olivier Dulac
1

Se você realmente não tem tar disponível, pode usar o gzip para criar um backup de um diretório usando a opção (-r - recursivamente), mas talvez não seja exatamente o que você espera ...

Primeiro, você precisará copiar seu diretório para outro nome, se desejar manter o diretório original intocável.

#cp -a directory my_gzip_alone_backup

Segundo, você compactará todos os arquivos no diretório recursivamente (-r).

#gzip -r my_gzip_alone_backup

Agora vamos dar uma olhada dentro do my-gzip-alone-backup. Você não terá um único arquivo myfile.gz conforme o esperado, mas muitos arquivos compactados em gzip recursivamente. Mas não é bom fazer isso com etc por causa dos links simbólicos ...

Para descompactar o diretório, a mesma lógica pode ser aplicada com o gunzip.

Outra maneira é converter o diretório em um único arquivo, se você não tem tar para fazer isso, mas possui o dd util, como demonstrado neste post: /ubuntu/626634/converting-a -arquivo para o diretório

Luciano Andress Martini
fonte