Pertanyaan Bagaimana cara mengompres tarbal yang menggunakan .xz?


Saya terbiasa mengekstrak tarballs dengan -xfz bendera, yang menangani arsip gzip dan bzip2.

Baru-baru ini saya mengalami masalah .tar.xz file dan saya ingin uncompress dalam satu langkah menggunakan tar, bagaimana saya bisa melakukannya?


658
2018-01-02 23:41


asal


perhatikan Anda mungkin harus menginstal xz-utils jika belum ada - Tobias Kienzler
inilah skrip kecil saya yang menebak bendera tar untuk Anda: gist.github.com/shime/5908634 - shime
tar --help daftar tar bendera. -xzf berlaku untuk gzip. -xjf untuk bz2. -xJf untuk xz. - noobninja


Jawaban:


Ubuntu menyertakan GNU tar, yang mengenali formatnya sendiri! Satu perintah bekerja dengan metode kompresi yang didukung, per manual.

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

dll. Jika tar memberikan Cannot exec kesalahan, Anda mungkin perlu sudo apt install xz-utils pertama.


860
2018-02-26 17:41



Ini adalah fitur dari GNU tar. Saya tidak tahu tentang implementasi yang bersaing, tetapi GNU tar harus menjadi yang paling relevan untuk ubuntu. gnu.org/software/tar/manual/tar.html#SEC131 - ramslök
jika Anda mengalami tar: xz: Cannot exec: No such file or directory, instal xz-utils: sudo apt-get install xz-utils - Collin Anderson
Ini bukan jawaban, itu adalah 'Anda tidak peduli dengan jawabannya, meskipun Anda meminta' tanggapan. Cadangan pemikiran untuk orang yang tidak 'terbaru' - Sean Houlihane
Versi apa dari tar tidak lagi membutuhkan bendera khusus? - Mark Tomlin
@SeanHoulihane, itu bukan jawaban karena OP meminta di bawah umur Masalah XY. ramslök memberikan OP lebih baik dari yang diminta, dan itu termasuk efektif "Anda tidak peduli dengan jawabannya, meskipun Anda bertanya", yang sesuai karena itu benar. - JonathanHayward


Mencoba

tar -xJf file.pkg.tar.xz

Itu -J adalah bendera yang secara khusus berhubungan dengan file .xz.


287
2018-01-02 23:42



Saya ingin tahu berapa banyak bendera yang akan kita miliki pada 2020. Seperti ... 45 kompresi yang berbeda? Mengetahui switch tar sudah menjadi sabuk hitam di Linux-fu. : / - Shiki
@Shiki: Itu mungkin mengapa itu tidak membuat Anda menentukan bendera format kompresi lagi. (Lihat jawaban ramslök.) - Nate C-K
xkcd.com/1168 - Wordzilla
Ini harus benar-benar menjadi jawaban yang diterima karena menjawab pertanyaan untuk setiap versi tar yang mendukung .xz - pospi
Pada tahun 2030 bendera menjadi Turing selesai ... 2040 mereka menjadi hidup - user1359


Jika karena alasan tertentu tar solusi tidak berfungsi (mungkin karena Anda menggunakan OS X built-in), coba ini:

unxz < file.tar.xz > file.tar

… Yang setara dengan:

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

Kemudian gunakan tar untuk mengolah file.


68
2018-01-19 20:05



Itu harus bisa dibangun dengan pipa. - gerrit
Saya merasa seperti Anda bisa melakukannya unxz < file.tar.xz | tar x atau serupa. - thirtythreeforty
ini berhasil bagi saya, di mana tar xf tidak. ubuntu 12.04 - philshem
Setidaknya di mesin Ubuntu saya, unxz tidak setara dengan xz -dc, tapi untuk xz -d. Jadi untuk mengekstrak file.tar.xz untuk file.tar, Anda cukup menulis unxz file.tar.xz. Jika Anda ingin setara dengan xz -dc, dekompresi ke stdout, gunakan xzcat. Sebagai contoh xzcat file.tar.xz | tar x. - nwellnhof


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.


24
2018-05-23 18:44



Jawaban Terbaik. xz tidak perlu pengalihan stdout. Bahkan lebih baik: unxz -k - Mark Jeronimus


Saya memiliki masalah yang sama, tar xf perintah tidak dapat mengekstraknya. Untuk memperbaiki ini, Anda perlu menginstal xz-utils paket. Solusinya adalah:

sudo apt-get install xz-utils

kemudian:

tar xf myfile.tar.xz

12
2018-02-14 18:44





Bagaimana dengan

tar -xvf package.tar.xz

-x - ekstrak file

-v - secara verbosely daftar file yang diproses

-f - gunakan file arsip yang ditentukan


8
2018-03-05 17:16





Jika tar mengenali format kompresi, Anda tidak memerlukan bendera:

tar xvf *.tar.xz

Jika Anda perlu mendekompresi 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
2018-02-04 06:13





Hanya ingin menambahkan bahwa jika Anda memiliki versi lama GNU tar sebelum versi 1.22 ketika opsi -xz dan -J tersedia, Anda dapat memadatkan atau mendekompresi 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

3
2017-09-04 01:21





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

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

2
2018-01-03 00:06



Membutuhkan 7z, yang bukan yang dia inginkan - dia ingin melakukannya sepenuhnya dalam tar. - jrg♦
Ya, terima kasih - "xz" membuat saya mengerti! Yah, itu satu langkah saja :) Dan tar J = tar xz, jadi kami bahkan mungkin menulis tar xzf file.tar.xz seperti "normal" tar xvfz file.tar.gz. Jadi pada dasarnya tidak ada perbedaan. Tidak perlu dasbor sebelum menggunakan sakelar.
Ini hampir seperti jawaban yang diberikan dalam pertanyaan itu. :)
Saya terlempar juga karena tar zxf error pada file .xz, saya kira hanya menggunakan J sepanjang waktu akan menjadi cara untuk pergi. - Jorge Castro
Ya! Halaman manual tidak sinkron dengan sumber: buffer.c menggunakan -J untuk lzma.


Ubuntu hadir dengan Python (Python 2.7 dan Python 3), yang berisi modul-modul yang diperlukan untuk mengekstrak arsip. Jadi jika karena alasan apa pun tar perintah hilang (misalkan sysadmin Anda telah menghapusnya dan tidak ada sudo privillege untuk menginstalnya), seseorang dapat menggunakan:

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

Sebagai skrip singkat, 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 sebuah .xz file dengan tar cJf thing.xz /etc/passwd. Arsip akan berisi etc direktori dengan passwd file di dalam. Menggunakan skrip di atas akan menghasilkan etc direktori yang dibuat di direktori kerja Anda saat ini, dan di dalamnya akan passwd mengajukan. Tentu saja, ini selalu dapat diperpanjang dengan menentukan jalur di mana Anda ingin mengekstrak di dalam extractall() fungsi.


1
2018-06-08 08:36