Além da resposta @Lekensteyn, eu gostaria de acrescentar que este comportamento é baseado em fazer uma coisa e fazê-lo bem a filosofia - tar
programa sabe como colocar vários arquivos em um único fluxo (com .tar
extensão), gzip
sabe como comprimir um arquivo único (adicionando .gz
extensão) *. Ao combinar essas ferramentas, você pode criar um comando que comprime vários arquivos em um único .tag.gz
arquivo.
Essa abordagem é muito flexível - você pode combinar alguns comandos padrão do Unix para fazer todo tipo de coisa. Por exemplo, se você escrever um programa melhor para compactar arquivos, não precisará modificá tar
-lo para permitir a criação de .tar.mymegazip
arquivos; em vez disso, basta direcionar tar
a saída para o seu compressor.
Da mesma forma, tar
nada sabe sobre SSH, mas, combinando comandos, você pode criar um script que arquiva arquivos, carrega-os em uma máquina remota via SSH e des-arquiva-os lá.
Compare isso ao zip
comando, que não se originou no Unix - ele possui ferramentas internas para compactar diretórios inteiros, criptografar arquivos, dividir o arquivo em arquivos zip menores etc.
(nota de rodapé) - sim, tar
é capaz de compactar ou compactar os arquivos com gzip ou bzip, usando -z
e -j
alternando, eles foram adicionados por conveniência e o tar do GNU está realmente gerando gzip
ou bzip2
como um novo processo.
tar c dir/ | gzip > dir.tar.gz
etar czf dir.tar.gz dir/
comandos fazem a mesma coisa. Um exemplo, ondetar
é combinado com SSH etar
(novamente):tar cz Documents/ | ssh user@host 'tar xz
(equivalente rsync seria:rsync -a Documents user@host:
)