Làm thế nào để bạn trích xuất một thư mục từ một kho lưu trữ tar.gz lớn?


132

Tôi đang sử dụng lệnh này trên kho lưu trữ 5 GB

tar -zxvf archive.tar.gz /folder/in/archive

Đây có phải là cách chính xác để làm điều này? Có vẻ như sẽ mất mãi mãi mà không có đầu ra dòng lệnh ...


Bạn đã sử dụng một con đường tuyệt đối hay tương đối? Nên tương đối, khác hơn là nó có vẻ đúng. Bạn đã để nó chạy được bao lâu và hệ thống của bạn tốt như thế nào? Nó sẽ mất ít nhất vài phút trên một máy nhanh. Có khả năng một giờ trở lên? Tôi đang chạy thử nghiệm ngay bây giờ.
Kevin

Vâng, nó đã hoàn thành sau ~ 1 giờ, nhưng đường dẫn tuyệt đối đã sai, bạn đã đúng.
Hội trường Garrett

5
Trên Linux, bạn có thể xem cách xa vào các kho lưu trữ tarlà với cat /proc/$(pidof tar)/fdinfo/0(thích ứng với lệnh nếu bạn có nhiều hơn một tartiến trình đang chạy).
Gilles

Phần quan trọng cũng không có dấu gạch chéo. Sử dụng folder/folder2/sẽ không làm việc.
Marki555

Câu trả lời:


145

tarlưu trữ các đường dẫn tương đối theo mặc định . GNU tar thậm chí còn nói như vậy nếu bạn cố lưu trữ một đường dẫn tuyệt đối:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

Nếu bạn cần giải nén một thư mục cụ thể, hãy xem những gì trong tệp tar:

tar -tvf foo.tar

Và lưu ý tên tệp chính xác. Trong trường hợp foo.tartệp của tôi , tôi có thể trích xuất /home/foo/barbằng cách nói:

tar -xvf foo.tar home/foo/bar # Note: no leading slash

Vì vậy, không, cách bạn đăng không (nhất thiết) là cách chính xác để làm điều đó. Bạn phải rời khỏi dấu gạch chéo hàng đầu. Nếu bạn muốn mô phỏng các đường dẫn tuyệt đối, cd /trước tiên hãy thực hiện và đảm bảo bạn là siêu người dùng. Ngoài ra, điều này cũng làm như vậy:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

Có những lý do rất rõ ràng, tốt tại sao tarchuyển đổi đường dẫn thành tương đối. Một là khả năng khôi phục kho lưu trữ ở những nơi khác ngoài nguồn ban đầu. Cái khác là bảo mật. Bạn có thể trích xuất một kho lưu trữ, hy vọng các tệp của nó xuất hiện trong thư mục làm việc hiện tại của bạn và thay vào đó ghi đè lên các tệp hệ thống (hoặc công việc của riêng bạn) ở nơi khác do nhầm lẫn.

Lưu ý: nếu bạn sử dụng -Ptùy chọn, tar sẽ lưu trữ các đường dẫn tuyệt đối. Vì vậy, nó luôn trả tiền để kiểm tra nội dung của tài liệu lưu trữ lớn trước khi trích xuất.


36
--strip-components=Ncó thể hữu ích cho một số ở đây.
Acumenus

2
trong trường hợp của tôi, nó là cần thiết để viết ./foldername/thay vì foldername, tôi đoán rằng đó là bởi vì khi tôi tạo ra tar tôi đã tạo ra nó tar -cvf santi.tar ./*và khi tôi "liệt kê" tar đó là những gì nó nóidrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
santiago arizti

1
Còn về .gz?
Peter Krauss

1
@PeterKrauss thay đổi -xvfđể -xzvf(thêm -ztùy chọn) và rõ ràng foo.tarđến foo.tar.gzhoặc bất cứ điều gì lưu trữ của bạn được đặt tên. Điều tương tự giữ cho -j(bz2) và trên một số phiên bản gần đây, -J(xz). Nếu không, một đường ống như zcat foo.tar.gz | tar -xvf - …cũng hoạt động.
Alexios

Và hãy nhớ rằng, nếu bạn cảm thấy mệt mỏi với tất cả đầu ra dài dòng trong quá trình trích xuất, hãy bỏ qua vtất cả các ví dụ. Ví dụ, tar -tf foo.tartar -xf foo.tar ....
Bo R
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.