curl tập tin .gz và đường ống để giải nén


13

Tôi đang cố tải xuống một số .gztệp (NB không phải tệp .tar.gz) từ các URL đã cho và giải nén chúng để ghi đè lên các tệp hiện có, nếu có.

Đối với mỗi lần tải xuống riêng lẻ, tôi đã thử như sau:

curl -O $URL | gunzip -f

Tuy nhiên, điều này không hoạt động vì nó đã thất bại với : gzip: stdin: unexpected end of file. Tôi đã chạy một loạt lệnh này trong một tập lệnh bash shell.

Nếu tôi đổ lệnh vào hai bước rõ ràng, tức là trước tiên tải xuống tệp, sau đó giải nén .gztệp, nó sẽ hoạt động.

Tại sao phiên bản đường ống không hoạt động?


1
Bạn có chắc chắn rằng curl -Othực sự truyền tệp đến đầu ra tiêu chuẩn? Có lẽ bạn đang nghĩ đến wget -O-?
Steeldo

@steel ấn bạn nên đăng nó như một câu trả lời curl | tar xz ...
Panther

Cũng có --compressed, nhưng điều này chỉ hoạt động cho một phản ứng nén.
kenorb

Câu trả lời:


18

Một đường ống (được biểu thị bằng |ký hiệu) sẽ gửi đầu ra tiêu chuẩn của một quá trình đến đầu vào tiêu chuẩn của một quá trình khác. Trong trường hợp của bạn, bạn dường như muốn sử dụng một tệp có tên nên một đường ống là không phù hợp - cụ thể, không có gì để đường ống (do đó là gunziplỗi) vì các nội dung từ xa sẽ chuyển đến một tệp cục bộ. Thay vào đó, bạn cần trích xuất tên của tệp - ví dụ: từ URL của tệp - đại loại như (sử dụng các khả năng thao tác chuỗi tích hợp của bash)

curl -O "$URL" && gunzip -f "${URL##*/}"

Nếu bạn muốn sử dụng một đường ống, thì cách để làm nó sẽ giống như

curl "$URL" | gunzip -c

(không có -Otùy chọn) để curltruyền các nội dung từ xa đến stdoutnơi có thể được dẫn vào gunzip, nhưng sau đó bạn sẽ cần chuyển hướng gunzipđầu ra để ghi đè lên tệp không nén mục tiêu nếu thích hợp.


5

Thực hiện theo chuyển hướng khi tải xuống. Đôi khi một máy chủ web có các chuyển hướng ẩn vì lý do bảo mật và / hoặc ngẫu nhiên. Nếu bạn không tuân theo chuyển hướng, dữ liệu sai sẽ được tải xuống và ứng dụng của bạn đọc dữ liệu được xử lý sẽ bị nhầm lẫn. Bạn có thể theo dõi chuyển hướng với cuộn tròn bằng cách sử dụng cờ -L.

curl -L https://example.com/mygzip.tar.gz | tar zxv
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.