2009-08-31 24 views
22

VẤN ĐỀ: Tôi muốn có thể trích xuất các tệp tar.gz trong một bước. Điều này làm cho câu hỏi của tôi gần như giống với câu hỏi này: stackoverflow question for tar-gz.trích xuất theo chương trình tar.gz trong một bước (trên cửa sổ có 7zip)

Câu hỏi của tôi là gần như giống nhau, nhưng không giống nhau, vì tôi muốn thực hiện việc này trên cửa sổ bằng dòng lệnh 7zip (hoặc thứ gì đó tương tự) bên trong tệp dơi hoặc tập lệnh ruby ​​/ perl/python.

CÂU HỎI: Nhiệm vụ dường như đơn giản này chứng minh được sự tham gia nhiều hơn so với lần xuất hiện đầu tiên. Có ai có một kịch bản thực hiện điều này không?

+6

Bình chọn để di chuyển đến superuser.com, vì nó không chính xác lập trình có liên quan. –

+1

@AndyWhite Vì OP muốn thực hiện điều này bằng cách sử dụng tập lệnh bat/ruby ​​/ perl/python và kịch bản có thể được coi là một chương trình nhỏ, câu hỏi liên quan đến lập trình. – HelloGoodbye

Trả lời

25
7z e example.tar.gz && 7z x example.tar 

Sử dụng && để kết hợp hai lệnh trong một bước. Sử dụng 7zip di động (bạn chỉ cần 7z.exe và 7z.dll)

+9

Đây không phải là một bước chính xác. Nó vẫn đang thực hiện bước gzip đầu tiên, để lại một tệp tar có khả năng rất lớn xung quanh. – bug

5

Vì bạn đã yêu cầu 7 mã hoặc thứ gì đó tương tự, tôi đang cung cấp một công cụ thay thế được viết cho trường hợp sử dụng chính xác của bạn.

Tiện ích tartool (http://tartool.codeplex.com/) là công cụ mã nguồn mở và miễn phí được tạo bằng thư viện .NET SharpZipLib.

Ví dụ commmand để trích xuất một .tar.gz (hoặc .tgz) tập tin,

C:> TarTool.exe D: \ sample.tar.gz ./

Disclaimer: Tôi là tác giả của tiện ích này.

53

Câu hỏi cũ, nhưng tôi đã đấu tranh với nó ngày hôm nay vì vậy đây là 2c của tôi. Các công cụ 7zip commandline "7z.exe" (Tôi đã cài đặt v9.22) có thể viết thư cho stdout và đọc từ stdin để bạn có thể làm mà không có file tar trung gian bằng cách sử dụng một ống:

7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename" 

đâu:

x  = Extract with full paths command 
-so = write to stdout switch 
-si = read from stdin switch 
-aoa = Overwrite all existing files without prompt. 
-ttar = Treat the stdin byte stream as a TAR file 
-o = output directory 

Xem tệp trợ giúp (7-zip.chm) trong thư mục cài đặt để biết thêm thông tin về các lệnh và công tắc dòng lệnh.

noted bởi @zespri powershell sẽ đệm đầu vào vào quy trình 7z thứ hai để có thể tiêu tốn rất nhiều bộ nhớ nếu tệp tar của bạn lớn. ví dụ:

& 7z x "somename.tar.gz" -so | & 7z x -aoa -si -ttar -o"somename" 

Một cách giải quyết từ this SO answer nếu bạn muốn làm điều này từ PowerShell là phải vượt qua các lệnh để cmd.exe:

& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"' 
+0

giải pháp tốt cho tôi! cảm ơn. – holly

+5

một lời khuyên: nếu bạn chạy nó trên cửa sổ, và kho lưu trữ của bạn là lớn không chạy này dưới PowerShell - nó sẽ hút toàn bộ điều vào bộ nhớ thay vì streaming. mở dấu nhắc cmd và chạy nó từ đó. –

+0

Điều này thật tuyệt vời. (Lưu ý rằng khi tôi thử nó (v15.12), nó tạo ra tập tin tar trong thư mục làm việc, nhưng đã xóa nó khi nó được thực hiện) – Dave

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