2010-08-12 42 views
13

Có thể lập trình kéo một tệp từ một tệp .tar.gz có kích thước không cần giải nén toàn bộ tarball vào đĩa không? Về cơ bản tôi cần phải nhận được bên trong các tập tin tar.gz lớn trên mạng và trích xuất 1 tệp văn bản nhỏ. Có vẻ như hơi quá tải để giải nén tarball vào đĩa, sau đó kéo tệp ra, sau đó xóa mọi thứ khác. Ngoài ra tôi sẽ làm điều này đệ quy (ví dụ như phụ thuộc gói, mỗi tập tin văn bản chỉ vào tar.gz nhiều hơn), do đó, lưu lượng mạng ít hơn và chu kỳ CPU tôi có thể nhận được đi với, thì tốt hơn.Trích xuất 1 tệp từ tar.gz bằng bash

+1

Không, nó có liên quan. Và bash là lập trình (loại). –

+1

@Matt Joiner: Nó không thực sự liên quan đến bash. Đó là một câu hỏi sử dụng cho một tiện ích hệ thống phổ biến có thể được gọi từ bất kỳ trình bao nào, không chỉ bash. Nhưng có, lập trình trong bash thực sự là chương trình, mặc dù những gì bạn có thể đã nghe đôi khi ở đây. – Cascabel

+0

Vâng, tôi nghĩ về SU nhưng nó nằm trong một kịch bản bash tương đối phức tạp, và nó sẽ được chạy qua máy không phải bởi một người sử dụng, vì vậy tôi figured nó là một chút SO hơn SU. – tj111

Trả lời

21

Từ trang người đàn ông, để trích xuất blah.txt từ foo.tar.gz:

tar -xzf foo.tar.gz blah.txt 

(Và điều này tiếp tục superuser, tất nhiên, nhưng hey, câu trả lời nhanh chóng là tốt đẹp quá.)

+0

Thao tác này có hoạt động nếu tệp nằm trong thư mục con bên trong cấu trúc tar.gz không? – tj111

+0

Với phiên bản hiện đại của GNU tar, bạn không phải chỉ định tùy chọn 'z' khi trích xuất - nó sẽ suy ra chính nó (và tương tự với tùy chọn 'j' cho các tệp nén bzip2). Khi tạo tập tin, bạn cần tùy chọn để nói cho tar biết cần tạo ra gì - vì vậy đối xứng không gây hại gì cả. –

+1

@ tj111: nếu tên tệp trong tệp tar là 'xyz/pqr/abc.txt', đó là những gì bạn chỉ định trong dòng lệnh. Bạn cũng có thể sử dụng các siêu ký tự kiểu shell: 'xyz/pqr/*' sẽ trích xuất tất cả các tệp trong tất cả các thư mục con trong 'xyz/pqr'. Chỉ cần cảnh giác xem liệu shell có mở rộng '*' cho bạn hay không - hãy sử dụng dấu ngoặc kép để dừng nó làm như vậy. –

4

Tôi phản hồi câu trả lời của Jefromi, với việc thêm đường dẫn đến tệp nếu bạn có thư mục trong tệp tar (điều này có vẻ hiển nhiên đối với một số, nhưng ban đầu nó không rõ ràng về cách chỉ định cấu trúc thư mục).

Ví dụ, nếu bạn đã làm tar tại thư mục src /, và blah.txt đã được release1/shared /, bạn sẽ quay lại thư mục src/(nếu bạn muốn nó không được xác định tại cùng một vị trí)

tar -xzf tar.gz release1/shared/blah.txt 

Nếu bạn không nhớ cấu trúc thư mục của tập tin tar của bạn (tôi là một chút vô tổ chức và đôi khi quên nơi tôi đã làm tar), bạn có thể luôn luôn

tar -tzf tar.gz 

để xem nội dung , hủy bỏ (Ctrl + C) một khi bạn nhận được một ý tưởng về cấu trúc thư mục của bạn.

+0

Cảm ơn vì điều này. Mặc dù nó xuất hiện bạn cần một '. /' Ở phía trước của các thư mục vì lý do gì để quét chúng. ví dụ. 'tar -xzf tar.gz./release1/shared/blah.txt' – tj111

Các vấn đề liên quan