Làm thế nào để tải xuống một kho lưu trữ và giải nén nó mà không lưu kho lưu trữ vào đĩa?


62

Tôi muốn tải xuống và trích xuất một kho lưu trữ trong một thư mục nhất định. Đây là cách tôi đã làm cho đến nay:

wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz
tar zxf dbt2-0.37.50.3.tar.gz
mv dbt2-0.37.50.3 dbt2

Thay vào đó, tôi muốn tải xuống và giải nén kho lưu trữ một cách nhanh chóng mà không cần tar.gzghi vào đĩa. Tôi nghĩ rằng đây có thể bằng đường ống đầu ra của wgetđể tar, và đưa ra tarmột mục tiêu, nhưng trong thực tế tôi không biết làm thế nào để đưa các mảnh lại với nhau.

Câu trả lời:


95

Bạn có thể làm điều đó bằng cách yêu wgetcầu xuất tải trọng của nó thành thiết bị xuất chuẩn (có cờ -O-) và thay thế đầu ra của chính nó (có cờ -q):

wget -qO- your_link_here | tar xvz -

Để chỉ định một thư mục đích:

wget -qO- your_link_here | tar xvz - -C /target/directory

Cập nhật

Nếu bạn có GNU tar

wget -qO- your_link_here | tar --transform 's/^dbt2-0.37.50.3/dbt2/' -xvz

sẽ cho phép bạn làm tất cả trong một bước.

-q Yên tĩnh

-O - đầu ra cho thiết bị xuất chuẩn


Để chỉ định đường dẫn phải là:wget -qO- your_link_here | tar xvz - -C /target/directory
Marslo

Có lẽ chỉ cần nói với mọi người để sử dụng tar thay vì wget sau đó?
Alexander Mills

wget -qO- <url> | tar -xvz -C <target folder>làm việc trên gnu tar.
AlikElzin-kilaka

14

Một tùy chọn khác là sử dụng curlghi vào thiết bị xuất chuẩn theo mặc định:

curl -s some_url | tar xvz -C /tmp

2
Tôi thích lựa chọn của bạn hơn những người khác nhưngcurl -s some_url | tar xvz - -C /tmp
FiftiN

1
như FiftiN đã đề xuất -> ví dụ để xem danh sách các tệp được lọc trong kho lưu trữ, người ta có thể sử dụng:$ curl -L https://api.github.com/repos/repo_owner/repo_name/tarball | tar tvfz - -C /tmp --wildcards *.py
Alex Glukhovtsev

11

Oneliner này thực hiện các mẹo:

tar xvzf -C /tmp/ < <(wget -q -O - http://foo.com/myfile.tar.gz)

giải thích ngắn gọn: phía bên phải trong ngoặc đơn được thực thi trước tiên ( -qyêu cầu wget thực hiện nó một cách lặng lẽ, -O -được sử dụng để ghi đầu ra vào thiết bị xuất chuẩn).

Sau đó, chúng ta tạo một đường ống có tên bằng cách sử dụng toán tử thay thế quá trình từ Bash <(để tạo đường ống có tên . Bằng cách này, chúng tôi tạo một bộ mô tả tệp tạm thời và sau đó hướng nội dung của bộ mô tả đó vào tar bằng <toán tử chuyển hướng tệp.

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.