Estou tentando criar um .tar.xz
arquivo compactado em um comando. Qual é a sintaxe específica para isso?
Eu tentei tar cf - file | xz file.tar.xz
, mas isso não funciona.
compression
archive
tar
xz
George K.
fonte
fonte
v
ao comando switches (tar -cJvf
) a ser detalhado mostra os arquivos que estão sendo adicionados ao archive.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
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 otar.xz
arquivo.fonte
-f
não significa "do arquivo" quando passado paraxz
. 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:
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çãoxz
, porque é o padrão.Funciona com
gzip
ebzip2
também:ou
A descompressão também é bastante direta:
Se você tiver apenas
tar
arquivamento, poderá usarcat
:Se você precisar listar apenas os arquivos, use
tar t
.fonte
Usando opções de compactação xz
Se você deseja usar opções de compactação para
xz
, ou se estiver usandotar
no MacOS, provavelmente deseja evitar atar -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
chamaxz
com a-4e
opção de compactação. (igual a-4
--extreme
)> baz.tar.xz
direciona o arquivo tarredado e compactado parabaz.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 manualmentexz
como zip, embora o padrão seja zipar se não for indicado de outra forma.Para descompactar e descompactar
Para ecoar Rafael van Horn , descompactar e descompactar (veja a nota abaixo):
Nota: ao contrário da resposta de Rafael , use em
xz -dc
vez decatxz
. Os documentos recomendam isso caso você esteja usando isso para scripts. Melhor ter o hábito de usar-d
ou em--decompress
vez deunxz
também. No entanto, se necessário, o uso desses comandos na linha de comando é bom.fonte
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.fonte
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.