Respostas:
Use a -J
opção de compactação para xz
. E lembre-se de man tar
:)
tar cfJ <archive.tar.xz> <files>
Editar 10/08/2015:
Se você está passando os argumentos tar
com traços (por exemplo tar -cf
, ao contrário de tar cf
), a -f
opção deve vir por último , pois especifica o nome do arquivo (obrigado a @ABB por apontar isso!). Nesse caso, o comando se parece com:
tar -cJf <archive.tar.xz> <files>
f
último, mesmo sem o traço.
tar
no macOS parece suportar, -J
mas o recurso não é fornecido na página de manual. Tinha que procurar aqui em cima. Embora eles fazem XZ menção na seção sobre --options
...
O switch -J
funciona apenas em sistemas mais novos. O comando universal é:
Para criar o arquivo .tar.xz
tar cf - directory/ | xz -z - > directory.tar.xz
Explicação
tar cf - directory
lê o diretório / e começa a colocá-lo no formato TAR. A saída desta operação é gerada na saída padrão.
|
canaliza a saída padrão para a entrada de outro programa ...
... o que acontece ser xz -z -
. XZ está configurado para compactar ( -z
) o arquivo da entrada padrão ( -
).
Você redireciona a saída de xz
para o tar.xz
arquivo.
-f
não significa "do arquivo" quando passado para xz
. Em vez disso, é uma abreviação de --force
(consulte xz (1) para detalhes) e é melhor não ser usado, a menos que seja necessário.
tar cf - directory/ | xz -z -T0 - > directory.tar.xz
-1 -T0
ou -0 -T0
como opções, o que geralmente ainda oferece um arquivo menor que o gzip em um tempo comparável ou mais rápido, enquanto o padrão -6
é consideravelmente mais lento do que o gzip.
Se você gosta do modo pipe, esta é a solução mais limpa:
tar c some-dir | xz > some-dir.tar.xz
Não é necessário colocar a f
opção para lidar com arquivos e depois usá-lo -
para especificar que o arquivo é a entrada padrão. Também não é necessário especificar a -z
opção xz
, porque é o padrão.
Funciona com gzip
e bzip2
também:
tar c some-dir | gzip > some-dir.tar.gz
ou
tar c some-dir | bzip2 > some-dir.tar.bz2
A descompressão também é bastante direta:
xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x
Se você tiver apenas tar
arquivamento, poderá usar cat
:
cat archive.tar | tar x
Se você precisar listar apenas os arquivos, use tar t
.
Se você deseja usar opções de compactação para xz
, ou se estiver usando tar
no MacOS, provavelmente deseja evitar a tar -cJf
sintaxe.
De acordo com man xz
, a maneira de fazer isso é:
tar cf - baz | xz -4e > baz.tar.xz
Porque gostei do formato de Wojciech Adam Koszek , mas não da informação:
c
cria um novo arquivo morto para os arquivos especificados. f
lê de um diretório (melhor colocar este segundo porque -cf
! = -fc
)-
saídas para saída padrão|
canaliza a saída para o próximo comandoxz -4e
chama xz
com a -4e
opção de compactação. (igual a -4
--extreme
)> baz.tar.xz
direciona o arquivo tarredado e compactado para baz.tar.xz
Onde -4e
está, use suas próprias opções de compactação. Costumo usar -k
para --keep
o arquivo original e -9
para a compressão realmente pesado. -z
para definir manualmente xz
como zip, embora o padrão seja zipar se não for indicado de outra forma.
Para ecoar Rafael van Horn , descompactar e descompactar (veja a nota abaixo):
xz -dc baz.tar.xz | tar x
Nota: ao contrário da resposta de Rafael , use em xz -dc
vez de catxz
. Os documentos recomendam isso caso você esteja usando isso para scripts. Melhor ter o hábito de usar -d
ou em --decompress
vez de unxz
também. No entanto, se necessário, o uso desses comandos na linha de comando é bom.
tar -cJf
sintaxe no MacOS? Apenas curioso, porque eu estava fazendo isso agora e parecia estar funcionando.
Tente o seguinte: tar -cf file.tar file-to-compress ; xz -z file.tar
Nota:
|
pois isso executa comandos simultaneamente. Usando ;
ou &
executa comandos um após o outro.J
opção, mas isso funciona. Eu acho que você precisa do RHEL6.
tar -c file-to-compress | xz -z > file.tar.xz
.
&
não inicia um comando um após o outro. Em vez disso, ele iniciará o primeiro como um processo em segundo plano.
v
ao comando switches (tar -cJvf
) a ser detalhado mostra os arquivos que estão sendo adicionados ao archive.