É estranho que ninguém mais tenha mencionado que as versões modernas do GNU tar
permitem 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 gzip
ou bzip2
compactando arquivos, o GNU tar
os 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 gzip
que 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 bzip2
que, na minha experiência, geralmente tem uma vantagem de 10-20% sobre gzip
.
[ Adicionado : alguém anotou em sua resposta que cpio
tem convenções engraçadas. Isso é verdade, mas até que o GNU tar
obtivesse as opções relevantes (' -T -
'), cpio
era 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 cpio
pontua; 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 -depth
opçã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 -depth
opção, o cpio
comando 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). ]