É estranho que ninguém mais tenha mencionado que as versões modernas do GNU tarpermitem que você comprima enquanto empacota:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
Você também pode usar o compressor de sua escolha, desde que ele suporte as opções ' -c' (para stdout ou de stdin) e ' -d' (descompactar):
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
Isso permitiria a você especificar qualquer compressor alternativo.
[ Adicionado : se você estiver extraindo gzipou bzip2compactando arquivos, o GNU taros detecta automaticamente e executa o programa apropriado. Ou seja, você pode usar:
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
e estes serão tratados adequadamente. Se você usa um compressor não padrão, precisa especificá-lo ao fazer a extração.]
O motivo da separação é, como na resposta selecionada, a separação de funções. Entre outras coisas, significa que as pessoas podem usar o 'cpio ' programa para empacotar os arquivos (em vez de tar) e, em seguida, usar o compressor de escolha (uma vez, o compressor preferido era pack, mais tarde era compress(que era muito mais eficaz do que pack), e então gzipque correu anéis em torno de seus antecessores, e é totalmente competitivo com zip(que foi portado para Unix, mas não é nativo lá), e agora bzip2que, na minha experiência, geralmente tem uma vantagem de 10-20% sobre gzip.
[ Adicionado : alguém anotou em sua resposta que cpiotem convenções engraçadas. Isso é verdade, mas até que o GNU tarobtivesse as opções relevantes (' -T -'), cpioera o melhor comando quando você não queria arquivar tudo o que estava sob um determinado diretório - você poderia escolher exatamente quais arquivos seriam arquivados. A desvantagem decpio disso é que você não apenas pode escolher os arquivos - você tem que escolhê-los. Ainda há um lugar onde cpiopontua; ele pode fazer uma cópia in-situ de uma hierarquia de diretório para outra sem nenhum armazenamento intermediário:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
A propósito, a -depthopção ' ' ativada findé importante neste contexto - ela copia o conteúdo dos diretórios antes de definir as permissões nos próprios diretórios. Quando verifiquei o comando antes de inserir o acréscimo a esta resposta, copiei alguns diretórios somente leitura (permissão 555); quando fui deletar a cópia, tive que relaxar as permissões nos diretórios antes que ' rm -fr /new/place' pudesse terminar. Sem a -depthopção, o cpiocomando teria falhado. Só me lembrei disso quando fui fazer a limpeza - a fórmula citada é tão automática para mim (principalmente em virtude de muitas repetições ao longo de muitos anos). ]