Bagaimana cara saya mengompres tarball yang menggunakan .xz?


775

Saya terbiasa mengekstraksi tarbal dengan -xfzbendera, yang menangani arsip gzip dan bzip2.

Baru-baru ini saya mengalami .tar.xzfile dan saya ingin membuka kompresi dalam satu langkah menggunakan tar, bagaimana saya bisa melakukan itu?


10
perhatikan Anda mungkin harus menginstal xz-utilsjika belum ada
Tobias Kienzler

inilah skrip kecil saya yang menebak flag tar untuk Anda: gist.github.com/shime/5908634
shime

2
tar --helpdaftar tarbendera. -xzfberlaku untuk gzip. -xjfuntuk bz2. -xJfuntuk xz.
noobninja

Jawaban:


1016

Ubuntu menyertakan GNU tar, yang mengenali format dengan sendirinya! Satu perintah berfungsi dengan metode kompresi apa pun yang didukung, per manual .

tar xf archive.tar.xz
tar xf archive.tar.gz
tar xf archive.tar

dll. Jika tar memberikan Cannot execkesalahan, Anda mungkin perlu sudo apt install xz-utilsterlebih dahulu.


41
Ini adalah fitur tar GNU. Saya tidak tahu tentang implementasi yang bersaing, tetapi tar GNU harus menjadi yang paling relevan untuk ubuntu. gnu.org/software/tar/manual/tar.html#SEC131
ramslök

42
jika Anda bertemu tar: xz: Cannot exec: No such file or directory, instal xz-utils:sudo apt-get install xz-utils
Collin Anderson

10
Ini bukan jawaban, itu adalah jawaban 'Anda tidak peduli dengan jawabannya, meskipun Anda bertanya'. Jangan khawatir dengan orang-orang yang tidak 'terbaru'
Sean Houlihane

6
Versi apa yang tartidak lagi membutuhkan tanda khusus?
Mark Tomlin

8
@SHeHoulihane, itu bukan jawaban karena OP menanyakan masalah XY kecil . ramslök memberikan OP lebih baik daripada yang diminta, dan itu termasuk "Anda tidak peduli dengan jawabannya, meskipun Anda bertanya" yang efektif karena itu benar.
Christos Hayward

331

Mencoba

tar -xJf file.pkg.tar.xz

Ini -Jadalah flag yang khusus menangani file .xz.


59
Saya ingin tahu berapa banyak bendera yang akan kita miliki di tahun 2020. Seperti ... 45 kompresi berbeda? Mengetahui tar switch sudah menjadi sabuk hitam di Linux-fu. : /
Shiki

22
@Shiki: Mungkin karena itu tidak membuat Anda menentukan flag format kompresi lagi. (Lihat jawaban ramslök.)
Nate CK


6
Ini benar-benar harus menjadi jawaban yang diterima karena menjawab pertanyaan untuk versi tar yang mendukung.xz
pospi

8
Pada tahun 2030 bendera menjadi lengkap Turing ... 2040 mereka menjadi mahluk hidup
user1359

80

Jika karena alasan tertentu tarsolusinya tidak berfungsi (mungkin karena Anda menggunakan bawaan OS X), coba ini:

unxz < file.tar.xz > file.tar

... yang setara dengan:

xz -dc < file.tar.xz > file.tar

Kemudian gunakan taruntuk membuka file.


2
Itu harus dapat dibangun dengan pipa.
gerrit

6
Saya merasa Anda bisa melakukan unxz < file.tar.xz | tar xatau serupa.
puluh tiga

7
ini bekerja untuk saya, di mana tar xftidak. ubuntu 12.04
philshem

Setidaknya di mesin Ubuntu saya, unxztidak setara dengan xz -dc, tetapi untuk xz -d. Jadi untuk mengekstrak file.tar.xzuntuk file.tar, Anda akan hanya menulis unxz file.tar.xz. Jika Anda ingin yang setara dengan xz -dc, dekompresi ke stdout, gunakan xzcat. Sebagai contoh xzcat file.tar.xz | tar x.
nwellnhof

30

xz adalah kompresor data lossless. Anda harus mengekstrak bola tar dari xz dan kemudian mengekstrak tar:

unxz my_archive.tar.xz      # results in my_archive.tar

Maka Anda tahu untuk mengekstrak tar

tar -xf my_archive.tar

Sumber: XZ Utils - Wikipedia .


1
Jawaban Terbaik. xztidak perlu pengalihan stdout. Bahkan lebih baik:unxz -k
Mark Jeronimus

@ MarkJeronimus Saya tidak menemukan ini begitu baik karena itu membuat file perantara. Menggunakan tar GNU atau pipa harus menuntut lebih sedikit sumber daya.
Melebius

15

Saya memiliki masalah yang sama, tar xfperintah tidak dapat mengekstraknya. Untuk memperbaiki ini, Anda perlu menginstal xz-utilspaket. Solusinya adalah:

sudo apt-get install xz-utils

kemudian:

tar xf myfile.tar.xz

14
tar -xvf package.tar.xz

-x - ekstrak file

-v - daftar file yang diproses secara lisan

-f - Gunakan file arsip yang ditentukan


5

Hanya ingin menambahkan bahwa jika Anda memiliki versi lama GNU tar sebelum versi 1.22 ketika opsi --xz dan -J tersedia, Anda bisa mengompres atau mendekompres file tar.xz dengan menggunakan --use-compress-program xz. Sebagai contoh,

tar --use-compress-program xz -cf example.tar.xz file1 file2 file3

atau

tar --use-compress-program xz -xf example.tar.xz

4

Jika tar mengenali format kompresi, Anda tidak perlu flag:

tar xvf *.tar.xz

Jika Anda perlu mendekompres input secara manual, misalnya karena tar Anda terlalu tua untuk mengenali xz, atau Anda memerlukan jalur khusus:

xz -cd *.tar.xz | tar xvf -

Pipa lebih cepat daripada membuat file perantara yang tidak terkompresi, dan menggunakan lebih sedikit ruang disk juga!



3

Wow, itu benar-benar bagus. Apakah itu dilakukan dengan 7zip di Mac? Coba ini:

7z x -so file.tar.xz | tar xf -

Membutuhkan 7z, yang bukan itu yang ia inginkan - ia ingin melakukannya sepenuhnya dalam tar.
jrg

Ya, terima kasih - "xz" membuat saya! Yah, itu satu langkah lagi :) Dan tar J= tar xz, jadi kita mungkin menulis tar xzf file.tar.xzseperti "normal" tar xvfz file.tar.gz. Jadi pada dasarnya tidak ada perbedaan. Tidak perlu tanda hubung sebelum menggunakan sakelar.

Ini hampir seperti jawaban yang diberikan dalam pertanyaan itu. :)

Saya terlempar juga karena tar zxf kesalahan pada file .xz, saya kira hanya menggunakan J sepanjang waktu akan menjadi cara untuk pergi.
Jorge Castro

2
Ya! Halaman manual tidak sinkron dengan sumber: buffer.c menggunakan -J untuk lzma.

3

Ubuntu hadir dengan Python (Python 2.7 dan Python 3), yang berisi modul-modul yang diperlukan untuk mengekstraksi arsip. Jadi jika karena alasan apa pun tarperintah tidak ada (misalkan sysadmin Anda telah menghapusnya dan Anda tidak memiliki sudoprivillege untuk menginstalnya), Anda dapat menggunakan:

python3 -c 'import tarfile,sys; b = tarfile.open(sys.argv[1]);print(b.extractall())' ./archive.xz 

Sebagai skrip pendek, itu lebih mudah dibaca sebagai:

#!/usr/bin/env python3
import tarfile,sys

with tarfile.open( sys.argv[1] ) as fd:
    fd.extractall()

Misalkan saya membuat .xzfile dengan tar cJf thing.xz /etc/passwd. Arsip akan berisi etcdirektori dengan passwdfile di dalamnya. Menggunakan skrip di atas akan menghasilkan etcdirektori yang dibuat di direktori kerja Anda saat ini, dan di dalamnya akan ada passwdfile. Tentu saja, ini selalu dapat diperpanjang dengan menentukan jalur tempat Anda ingin mengekstrak di dalam extractall()fungsi.


0

unar adalah program sederhana yang cukup bagus dan mudah diketik, untuk mengarsipkan hampir semua format termasuk 7z dan RAR

tampaknya ditulis dalam (GNU) Objective-C dan karenanya memerlukan instalasi dari beberapa gnustep(implementasi Objective-C GNU) perpustakaan ( gnustep-base-runtimedan libgnustep-base1.25)

jika Anda menggunakan --install-suggest atau telah mengkonfigurasi aptuntuk menginstal paket yang disarankan, unarakan menyarankan dan menginstal banyak program GUI GNUStep yang bukan yang Anda inginkan

sudo apt install --no-install-suggests unar 
unar linux-source.tar.xz

itu akan membuat direktori keluaran linux-sourcesecara otomatis.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.