Làm cách nào để giải nén tarball sử dụng .xz?


776

Tôi đã quen với việc trích xuất tarball bằng -xfzcờ, xử lý tài liệu lưu trữ gzip và bzip2.

Gần đây tôi đã chạy vào một .tar.xztập tin và tôi muốn giải nén nó trong một bước bằng cách sử dụng tar, làm thế nào tôi có thể làm điều đó?


10
lưu ý bạn có thể phải cài đặt xz-utilsnếu chưa có mặt
Tobias Kienzler

đây là kịch bản nhỏ của tôi đoán cờ tar cho bạn: gist.github.com/shime/5908634
shime

2
tar --helpliệt kê tarcờ. -xzfáp dụng cho gzip. -xjfđể bz2. -xJfđể xz.
noobninja

Câu trả lời:


1017

Ubuntu bao gồm GNU tar, tự nhận dạng định dạng! Một lệnh hoạt động với bất kỳ phương pháp nén được hỗ trợ, theo hướng dẫn .

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

vv Nếu tar cho một Cannot execlỗi, bạn có thể cần phải sudo apt install xz-utilsđầu tiên.


41
Đây là một tính năng của GNU tar. Tôi không biết về việc triển khai cạnh tranh, nhưng GNU tar nên có liên quan nhất đến Ubuntu. gnu.org/software/tar/manual/tar.html#SEC131
ramslök

42
nếu bạn gặp phải tar: xz: Cannot exec: No such file or directory, hãy cài đặt xz-utils:sudo apt-get install xz-utils
Collin Anderson

10
Đây không phải là một câu trả lời, đó là câu trả lời 'bạn không quan tâm đến câu trả lời, mặc dù bạn đã hỏi'. Hãy dành một suy nghĩ cho những người không tham gia 'mới nhất'
Sean Houlihane

6
Phiên bản tarnào không còn yêu cầu cờ cụ thể?
Đánh dấu Tomlin

8
@SeanHoulihane, đó không phải là câu trả lời vì OP đã hỏi một vấn đề nhỏ về XY . ramslök đã cho OP tốt hơn so với yêu cầu và bao gồm một câu "Bạn không quan tâm đến câu trả lời hiệu quả, mặc dù bạn đã hỏi", điều này phù hợp bởi vì đó là sự thật.
Christos Hayward

331

Thử

tar -xJf file.pkg.tar.xz

Các -Jlà lá cờ mà cụ thể giao dịch với các file .xz.


59
Tôi tự hỏi chúng ta sẽ có bao nhiêu cờ trong năm 2020. Giống như ... 45 lần nén khác nhau? Biết các công tắc tar đã là một đai đen trong Linux-fu. : /
Shiki

22
@Shiki: Đó có thể là lý do tại sao nó không khiến bạn chỉ định cờ định dạng nén nữa. (Xem câu trả lời của ramslök.)
Nate CK


6
Đây hoàn toàn phải là câu trả lời được chấp nhận vì nó trả lời câu hỏi cho bất kỳ phiên bản nào của tar hỗ trợ.xz
pospi

8
Vào năm 2030, cờ trở thành Turing hoàn thành ... 2040 chúng trở nên hữu tình
user1359 14/2/17

80

Nếu vì một lý do nào đó, các targiải pháp không hoạt động (có lẽ vì bạn đang sử dụng phần mềm tích hợp OS X), hãy thử điều này:

unxz < file.tar.xz > file.tar

Sòng bạc tương đương với:

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

Sau đó sử dụng tarđể gỡ các tập tin.


2
Điều đó nên được xây dựng với một đường ống.
gerrit

6
Tôi cảm thấy như bạn có thể làm unxz < file.tar.xz | tar xhoặc tương tự.
thứ ba mươi

7
Điều này làm việc cho tôi, nơi tar xfkhông.
ubfox

Ít nhất là trên máy Ubuntu của tôi, unxzkhông tương đương xz -dc, nhưng với xz -d. Vì vậy, để giải nén file.tar.xzđể file.tar, bạn chỉ đơn giản là viết unxz file.tar.xz. Nếu bạn muốn tương đương xz -dc, giải nén thành thiết bị xuất chuẩn, hãy sử dụng xzcat. Ví dụ xzcat file.tar.xz | tar x.
nwellnhof

30

xz là một máy nén dữ liệu lossless. Bạn sẽ phải trích xuất tar tar từ xz và sau đó giải nén tar:

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

Sau đó, bạn biết để trích xuất một tar

tar -xf my_archive.tar

Nguồn: XZ Utils - Wikipedia .


1
Câu trả lời hay nhất. xzkhông cần chuyển hướng mạnh mẽ. Thậm chí tốt hơn:unxz -k
Mark Jeronimus

@MarkJeronimus Tôi không thấy điều này tốt vì nó tạo ra một tệp trung gian. Sử dụng GNU tar hoặc một đường ống sẽ đòi hỏi ít tài nguyên hơn.
Melebius

15

Tôi đã có cùng một vấn đề, tar xflệnh không thể giải nén nó. Để khắc phục điều này, bạn cần cài đặt xz-utilsgói. Giải pháp là:

sudo apt-get install xz-utils

sau đó:

tar xf myfile.tar.xz

14
tar -xvf package.tar.xz

-x - giải nén tập tin

-v - danh sách các tập tin được xử lý

-f - sử dụng tệp lưu trữ được chỉ định


5

Chỉ muốn thêm rằng nếu bạn có phiên bản cũ của GNU tar trước phiên bản 1.22 khi các tùy chọn --xz và -J có sẵn, bạn có thể nén hoặc giải nén các tệp tar.xz bằng cách sử dụng --use-compress-program xz. Ví dụ,

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

hoặc là

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

4

Nếu tar nhận ra định dạng nén, bạn không cần cờ:

tar xvf *.tar.xz

Nếu bạn cần giải nén thủ công, chẳng hạn vì tar của bạn quá cũ để nhận ra xz hoặc bạn cần một đường dẫn đặc biệt:

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

Các đường ống nhanh hơn việc tạo một tệp trung gian không nén và cũng sử dụng ít dung lượng đĩa hơn!



3

Wow, đó là một trong những thực sự tốt. Nó đã được thực hiện với 7zip trên máy Mac chưa? Thử đi:

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

Yêu cầu 7z, đó không phải là những gì anh ấy muốn - anh ấy muốn làm điều đó hoàn toàn bằng tar.
jrg

Vâng, cảm ơn - "xz" đã giúp tôi! Chà, dù sao thì đó cũng là một bước :) Và tar J= tar xz, vì vậy chúng tôi thậm chí có thể viết tar xzf file.tar.xznhư "bình thường" tar xvfz file.tar.gz. Vì vậy, về cơ bản không có sự khác biệt. Không cần gạch ngang trước khi sử dụng công tắc.

Nó gần giống như câu trả lời đã được đưa ra trong câu hỏi. :)

Tôi cũng bị loại vì tar zxf bị lỗi trong tệp .xz, tôi cho rằng chỉ cần sử dụng J mọi lúc sẽ là cách tốt nhất.
Jorge Castro

2
Vâng Trang thủ công không đồng bộ với nguồn: buffer.c sử dụng -J cho lzma.

3

Ubuntu đi kèm với Python (Python 2.7 và Python 3), chứa các mô-đun cần thiết để trích xuất tài liệu lưu trữ. Vì vậy, nếu vì bất kỳ lý do nào tarlệnh bị thiếu (giả sử sysadmin của bạn đã xóa nó và bạn không có sudoquyền riêng tư để cài đặt nó), người ta có thể sử dụng:

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

Là một đoạn script ngắn, dễ đọc hơn như:

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

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

Giả sử tôi đã tạo một .xztập tin với tar cJf thing.xz /etc/passwd. Các kho lưu trữ sẽ chứa etcthư mục với passwdtập tin bên trong. Sử dụng đoạn mã trên sẽ dẫn đến etcthư mục được tạo trong thư mục làm việc hiện tại của bạn và trong đó sẽ là passwdtệp. Tất nhiên, điều này luôn có thể được mở rộng bằng cách chỉ định đường dẫn mà bạn muốn trích xuất bên trong extractall()hàm.


0

unar là một chương trình khá đơn giản và dễ gõ, để bỏ lưu trữ hầu hết mọi định dạng bao gồm 7z và RAR

nó dường như được viết bằng (GNU) Objective-C và do đó yêu cầu cài đặt một số gnustepthư viện (triển khai Objective-C) của GNU ( gnustep-base-runtimelibgnustep-base1.25)

nếu bạn sử dụng --install-suggest hoặc đã cấu hình aptđể cài đặt các gói được đề xuất, unarsẽ đề xuất và cài đặt nhiều chương trình GUI GNUStep không phải là thứ bạn muốn

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

nó sẽ linux-sourcetự động tạo thư mục đầu ra .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.