Tôi cần lệnh nào để giải nén / giải nén tập tin .tar.gz?


830

Tôi đã nhận được một tệp .tar.gz khổng lồ từ một khách hàng chứa khoảng 800 mb tệp hình ảnh (khi không nén.) Công ty lưu trữ của chúng tôi rất chậm, vì vậy việc trích xuất tất cả các tệp cục bộ và gửi chúng qua ftp là không thực tế. Tôi đã có thể ftp tệp .tar.gz đến trang web lưu trữ của chúng tôi, nhưng khi tôi ssh vào thư mục của mình và thử sử dụng giải nén, nó sẽ báo lỗi này:

[esthers@clients locations]$ unzip community_images.tar.gz
Archive:  community_images.tar.gz
  End-of-central-directory signature not found.  Either this file is not a zipfile, or it constitutes one disk of a multi-part archive.  In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.
note:  community_images.tar.gz may be a plain executable, not an archive
unzip:  cannot find zipfile directory in one of community_images.tar.gz or community_images.tar.gz.zip, and cannot find community_images.tar.gz.ZIP, period.

Tôi cần sử dụng lệnh nào để trích xuất tất cả các tệp trong tệp .tar.gz?

Câu trả lời:


1390

Nhập man tarđể biết thêm thông tin, nhưng lệnh này sẽ thực hiện thủ thuật:

tar -xvzf community_images.tar.gz

Để giải thích thêm một chút, tar đã thu thập tất cả các tệp vào một gói , community_images.tar. Chương trình gzip áp dụng nén, do đó mở rộng gz. Vì vậy, lệnh làm một vài điều:

  • f: đây phải là cờ cuối cùng của lệnh và tar f ile phải ngay sau đó. Nó cho tar tên và đường dẫn của tệp nén.
  • z: bảo tar giải nén tệp lưu trữ bằng g z ip
  • x: tar có thể thu thập các tập tin hoặc e x đường dẫn chúng. xcái sau
  • v: làm cho tar nói rất nhiều. Đầu ra V erbose hiển thị cho bạn tất cả các tệp được giải nén.

5
@Shiki Tôi thấy đề xuất chỉnh sửa của bạn. Tôi không nghĩ đó là một thay đổi phù hợp, tôi thích cách tôi giải thích công cụ này. Tôi làm suy nghĩ của bạn tar -xfgợi ý sẽ làm cho một câu trả lời thêm tuyệt vời.
djeikyb

3
Đây là một trong những lời giải thích tốt hơn trong số hàng triệu câu hỏi tương tự
JohnMerlino

1
@KasunSiyambalapitiya Theo mặc định, kết thúc trong thư mục hiện tại. Xem thêm man tar; tìm kiếm các -Clựa chọn Hoặc có thể kiểm tra câu trả lời khác
djeikyb

6
Nhắc tôi về bài viết của xckd về tar. Tôi phải quay lại mọi lúc.
mgarey

19
Bản ghi nhớ của tôi cho điều này là: x đường z e v *** ing f iles.
Agargara

172

Nếu bạn muốn các tệp được trích xuất đến một đích cụ thể, bạn có thể thêm Hãy chắc chắn rằng bạn tạo thư mục trước, trong trường hợp này: ~ / Ảnh / Cộng đồng-C /destination/path/

Thí dụ:

mkdir ~/Pictures/Community
tar xf community_images.tar.gz -C /home/emmys/Pictures/Community/

Bạn có thể dễ dàng ghi nhớ nó nếu bạn cân nhắc việc nói với tar cho e X đường một F ile

gif của quá trình thực hiện tại thiết bị đầu cuối

Lưu ý: Hãy nhớ rằng bạn có thể tìm kiếm bên trong các trang man với ?+ thuật ngữ để tìm kiếm, sau đó nNđi đến phiên bản tiếp theo hoặc trước đó của thuật ngữ bạn đang tìm kiếm.


5
đừng quên C cho " thư mục c hange"! Ngoài ra, tôi cảm thấy tốt hơn là không trộn lẫn các tùy chọn gạch nối và không gạch nối (đặc biệt khó hiểu khi sử dụng ps).
djeikyb

2
Tại sao nó không giống như mọi lệnh khác?
Jan M.

6
Tôi yêu gợi ý của bạn 'tar to e X đường một F ile'
Nam G VU

2
1+ cho gif hoạt hình
Nick Steele

Người ta cũng có thể sử dụng --directory="/home/emmys/Pictures/Community/"(mà tôi nghĩ là dễ nhớ hơn -C).
Patrick Dark

107

Tại một số điểm tarđã được nâng cấp để tự động giải nén. Tất cả những gì bạn cần bây giờ là:

tar xf community_images.tar.gz

Giải thích tương tự được áp dụng:

  • f: đây phải là cờ cuối cùng của lệnh và tar f ile phải ngay sau đó. Nó cho tar tên và đường dẫn của tệp nén.
  • x: e x đường dẫn các tập tin.

Lưu ý thiếu dấu gạch nối cho các cờ lệnh. Điều này là do hầu hết các phiên bản tar cho phép cả hai tùy chọn kiểu gnu và bsd (đơn giản, gnu yêu cầu một dấu gạch nối, bsd không).


1
Có tài liệu nào về điều này? Tôi đã tìm kiếm khắp nơi để tham khảo về điều này, tôi chưa bao giờ sử dụng cờ -z và mọi thứ đều bị nén, vì vậy tôi đã lo lắng nếu tôi không nén tarball của mình, haha. Cảm ơn.
neurosnap


3
Có lẽ sẽ tốt hơn để chỉnh sửa câu trả lời ban đầu của bạn.
Seth

3
@ Vì nó cảm thấy / cảm thấy đủ khác biệt để trở thành một câu trả lời riêng biệt, đặc biệt là trong bối cảnh chỉnh sửa phá hoại đã kích động nó. Tôi sẽ suy nghĩ lại sau khi làm việc, có thể là một cách đơn giản để hợp nhất hơn tôi nghĩ ban đầu.
djeikyb

2
@EnricoMariaDeAngelis bsd tar kể từ ít nhất 2004 và gnu tar kể từ ít nhất 2010 đã hỗ trợ tự động chọn bộ giải nén. không thể có phiên bản "gần đây" (thế kỷ này? nineties +?) của tar yêu cầu chọn thủ công bộ giải nén.
djeikyb

11

Ghi nhớ tất cả các cờ cho tarcó thể là tẻ nhạt. Bắt buộc XKCD:

nhập mô tả hình ảnh ở đây

Vì vậy, tôi đã tạo ra kịch bản nhỏ của riêng mình trong Python để làm điều đó. Nhanh chóng, bẩn thỉu, cpgiống như cách sử dụng:

#!/usr/bin/env python3
import tarfile,sys,os
tf = tarfile.open(name=sys.argv[1],mode='r:gz')
where = '.'
if len(sys.argv) == 3:
    where = sys.argv[2]
tf.extractall(path=where)
tf.close()

Sử dụng nó như vậy:

myuntar.py archive.tar

Xem thêm kịch bản tương tự để giải nén lưu trữ zip .


2
:) chỉ có hai cờ tar cần nhớ -cafđể tạo dựa trên tên tệp và -xfđể trích xuất (AFAIK hoạt động trên mọi loại tar).
Videonauth

@Videonauth Tôi biết, nó không phức tạp lắm, nhưng vì một số lý do tôi không bao giờ nhớ những lựa chọn này. Có lẽ bởi vì tôi không thường xuyên đối phó với tài liệu lưu trữ.
Sergiy Kolodyazhnyy

điều này sẽ chỉ làm các tập tin tar được nén? tài liệu api đề cập đến một chế độ để đọc với nén trong suốt; điều đó sẽ hành xử như thế tar xf <file>nào?
djeikyb

7

Câu trả lời nhanh:

tar -xvf  <.tar file> or <.tar.xz file>
tar -xzvf <.tar.gz file>
tar -xjvf <.tar.bz2 file>

[ LƯU Ý ]:

  • -v Danh sách các tập tin được xử lý.
  • -z Lọc lưu trữ thông qua gzip.
  • -f Sử dụng tệp lưu trữ hoặc thiết bị ARCHIVE.
  • -x Trích xuất tập tin từ một kho lưu trữ.
  • -j bzip2.
  • tar -xfarchive.tar # Trích xuất tất cả các tệp từ archive.tar.

4

Trong trường hợp bạn không thể giải nén .tar.gztập tin bằng cách sử dụng

tar -xvzf fileName.tar.gz

Hãy thử giải nén bằng

tar xf fileName.tar.gz

4
nếu nó là một tập tin tar được nén, lệnh đầu tiên sẽ luôn hoạt động. nếu nó không hoạt động, bạn không có tập tin tar được nén. lệnh thứ hai là một khuyến nghị tuyệt vời cho những người không quan tâm thuật toán nén nào đã được sử dụng trên tệp tar của họ.
djeikyb

0

Bạn cũng có thể làm điều này trong bước đầu tiên:

cộng đồng gunzip_images.tar.gz

Sau đó, bạn có tệp: Community_images.tar

Bước thứ hai sẽ là:

tar -xvf Community_images.tar

Và tệp * .tar sẽ được trích xuất.


0

tập tin tar xvf.tar.gz

  • x để giải nén
  • v cho verbose (danh sách tập tin)
  • f cho tên tệp là tiếp theo

Bất kỳ phiên bản hiện đại nào của tar sẽ tự động phát hiện rằng kho lưu trữ được nén và thêm "z" cho bạn.

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.