ไฟล์ curl .gz และไปป์สำหรับการคลายการบีบอัด


13

ฉันกำลังพยายามดาวน์โหลด.gzไฟล์บางไฟล์ (ไม่ใช่ NB .tar.gz) จาก URL ที่กำหนดและขยายไฟล์เหล่านั้นเพื่อเขียนทับไฟล์ที่มีอยู่ถ้ามี

สำหรับการดาวน์โหลดแต่ละครั้งฉันลองต่อไปนี้:

curl -O $URL | gunzip -f

อย่างไรก็ตามสิ่งนี้ไม่ทำงานตามที่ล้มเหลวด้วย: gzip: stdin: unexpected end of file. ฉันใช้ชุดคำสั่งนี้ในสคริปต์เชลล์ bash

หากฉันรั่วไหลคำสั่งออกเป็นสองขั้นตอนอย่างชัดเจนนั่นคือขั้นแรกให้ดาวน์โหลดไฟล์จากนั้นขยายขนาด.gzไฟล์มันจะทำงาน

เหตุใดรุ่นของ piped จึงใช้งานไม่ได้


1
คุณแน่ใจหรือไม่ว่าcurl -Oสตรีมไฟล์ไปยังเอาต์พุตมาตรฐานจริง บางทีคุณอาจจะคิดว่าการwget -O-?
steeldriver

@steeldriver คุณควรโพสต์สิ่งนั้นเป็นคำตอบ curl | tar xz ...
Panther

นอกจากนี้ยังมี--compressedแต่วิธีนี้ใช้ได้สำหรับการตอบกลับที่ถูกบีบอัดเท่านั้น
kenorb

คำตอบ:


18

ไพพ์ (แสดงด้วย|สัญลักษณ์) ส่งเอาต์พุตมาตรฐานของกระบวนการหนึ่งไปยังอินพุตมาตรฐานของอีกกระบวนการหนึ่ง ในกรณีของคุณคุณต้องการใช้ไฟล์ที่มีชื่อดังนั้นไพพ์ไม่เหมาะสม - โดยเฉพาะไม่มีไพพ์ใด ( gunzipข้อผิดพลาด) เนื่องจากเนื้อหารีโมตกำลังไปยังไฟล์โลคัล แต่คุณจะต้องแตกชื่อของไฟล์ - ตัวอย่างเช่นจาก URL - สิ่งที่ต้องการ (โดยใช้ความสามารถในการจัดการสตริงของ bash ในตัว)

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

ถ้าคุณต้องการใช้ไปป์ไลน์วิธีทำก็น่าจะเป็นเช่นนั้น

curl "$URL" | gunzip -c

(ไม่มี-Oตัวเลือก) เพื่อให้curlสตรีมเนื้อหารีโมตไปยังstdoutที่ที่สามารถไพพ์ได้gunzipแต่คุณจะต้องเปลี่ยนทิศทางgunzipเอาต์พุตเพื่อเขียนทับไฟล์ที่ไม่มีการบีบอัดเป้าหมายตามความเหมาะสม


6

ติดตามการเปลี่ยนเส้นทางเมื่อดาวน์โหลด บางครั้งเว็บเซิร์ฟเวอร์ซ่อนการเปลี่ยนเส้นทางเพื่อความปลอดภัยและ / หรือเหตุผลสุ่ม หากคุณไม่ทำตามการเปลี่ยนเส้นทางข้อมูลที่ไม่ถูกต้องจะถูกดาวน์โหลดและแอปพลิเคชันของคุณที่อ่านข้อมูลไพพ์จะสับสน คุณสามารถติดตามการเปลี่ยนเส้นทางด้วย curl โดยใช้แฟล็ก -L

curl -L https://example.com/mygzip.tar.gz | tar zxv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.