Tại sao tôi không thể giải nén các tệp .tar.bz2 hoặc .tar.xz?


7

Tôi gặp sự cố khi giải nén tệp khi tôi cố gắng xây dựng từ nguồn trên OpenBSD Đầu tiên tôi nghĩ đó chỉ là tệp bị hỏng nhưng sau đó xảy ra với nhiều chương trình khác nhau và từ các phương thức tải xuống khác nhau ( curl -O, FTP, tải xuống trên Windows và chuyển qua WinSCP) và thậm chí cả các file khác nhau của cùng một chương trình ( .xz, .bz2, .lz) tôi đến tin rằng tôi phải làm gì đó sai. Lỗi tôi nhận được khi sử dụng

tar xzvf file

gzip: stdin: unrecognized file format
tar: End of archive volume 1 reached
tar: Sorry, unable to determine archive format.

Điều đó xảy ra với các chương trình khác nhau, với các phương thức tải xuống khác nhau và thậm chí các tệp khác nhau và điều này khiến tôi phát điên.

Ví dụ về các tệp tôi không thể giải nén ngay bây giờ: gnutls-3.4.3.tar.xzvà được gmp-6.0.0a.tar.bz2tải xuống qua Windows và được chuyển qua chế độ nhị phân WinSCP.

ls -L đầu ra:

-rw-r--r--   1 root  wheel  6546268 Jul 12 09:18 gnutls-3.4.3.tar.xz
-rw-r--r--   1 root  wheel  2319400 Jul 24  2015 gmp-6.0.0a.tar.bz2

od -x đầu ra:

od -x gnutls-3.4.3.tar.xz | head -10
0000000     37fd    587a    005a    0400    d6e6    46b4    0002    0121
0000020     0016    0000    2f74    a3e5    00e8    f06d    5d02    3300
0000040     8b9b    1912    a356    72d2    a129    5502    49fb    f64d
0000060     c492    64da    be73    7fde    4d79    9170    c055    27b9
0000100     8fc9    6caa    3f02    b551    e014    fd24    a2ad    c57d
0000120     ce49    59f3    da73    0ee9    0319    b7ea    c55c    5e2e
0000140     8fd8    7af6    4f97    b1a8    1ac9    d553    a703    1f1d
0000160     b226    682e    3e00    d2bc    a0f8    4b57    13d0    f887
0000200     7f84    c83f    94cd    154b    1dfe    37cd    25db    13d9
0000220     cdcd    5861    6558    acc3    0103    21ed    e8d9    979d

Tar của tôi dường như thậm chí không nhận ra Jlà một tùy chọn:

tar xJvf gmp-5.1.3.tar.xz
tar: unknown option J

Và lỗi đầu ra từ lệnh thứ hai:

tar xjvf gmp-6.0.0a.tar.bz2
tar: could not exec bzip2: No such file or directory
tar: End of archive volume 1 reached
tar: Sorry, unable to determine archive format.

Đầu ra lỗi hữu ích hơn:

tar xvf gnutls-3.4.3.tar.xz
tar: Cannot identify format. Searching...
tar: Cpio file name length 36039 is out of range
tar: Invalid header, starting valid header search.
tar: Cpio file name length 63118 is out of range
tar: Cpio file name length 38744 is out of range
<suppressed similar errors>
tar: Cpio file name in header is corrupted
tar: Cpio file name length 46161 is out of range
tar: Cpio file name length 32085 is out of range
<suppressed similar errors>
tar: Cpio file name in header is corrupted
<more suppressed similar errors>
tar: End of archive volume 1 reached

Đề nghị bạn đưa ra một ví dụ về một tập tin bạn đã tải xuống. URL từ xa, đầu ra của "tên tệp ls -l", đầu ra của "tên tệp od -x | head -10".
steve

Tôi đang làm điều này với quyền root, tôi không nghĩ đó là vấn đề về sự cho phép ... dù sao tôi cũng sẽ làm theo những gì bạn nói
Freedo 24/07/2015

Câu trả lời:


12

Các ztùy chọn cho targiải nén một lưu trữ sử dụng gunzip(hoặc tương đương nội bộ của mình), và là chỉ thích hợp cho gziptài liệu lưu trữ -compressed, thường với một .tar.gzphần mở rộng.

Để giải nén tài liệu lưu trữ bằng các định dạng nén khác, bạn có thể thử

tar xvf file

để xem nếu bạn tarđủ thông minh để tự mình tìm ra mọi thứ. Nếu không, bạn có thể cho nó biết công cụ giải nén nào sẽ sử dụng hoặc giải nén và dẫn lưu trữ:

  • cho .tar.bz2: tar xjvf filehoặcbunzip2 -c file | tar xvf -
  • cho .tar.xz: tar xJvf filehoặcxzcat file | tar xvf -
  • cho .tar.lz: tar xjf file --lziphoặclunzip -c file | tar xvf -

Với các tệp bạn đang sử dụng:

tar xJvf gnutls-3.4.3.tar.xz
tar xjvf gmp-6.0.0a.tar.bz2

hoặc rõ ràng với OpenBSD tar:

xzcat gnutls-3.4.3.tar.xz | tar xvf -
bunzip2 -c gmp-6.0.0a.tar.bz2 | tar xvf -

Bạn cần chắc chắn rằng bạn có xzbunzip2cài đặt; bunzip2có thể được đóng gói với bzip2.


bunzip2 không thành công, rõ ràng là tôi chưa cài đặt nó và không thể tìm thấy nó trên một gói nhân bản của OpenBSD, tôi đã có thể giải nén gnutls nhờ!
Freedo 24/07/2015

Như một lưu ý, làm thế nào để tôi biết nếu tôi nên tải xuống bằng FTP hoặc curl -O, điều này có thể làm hỏng một tập tin không? Và tôi có cần quyền X để giải nén tệp không (tôi nhận thấy rằng không ai có quyền thực thi chúng)?
Freedo 24/07/2015

Nó có thể được đóng gói là bzip2... Bạn được chào đón!
Stephen Kitt

Bạn không thể làm hỏng tệp bằng FTP hoặc curl. (Gotcha thực sự duy nhất là chế độ ASCII với FTP.) Không có quyền giải nén tệp, bạn chỉ cần có thể đọc tệp lưu trữ và ghi vào thư mục bạn đang giải nén.
Stephen Kitt
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.