วิธีดาวน์โหลดไฟล์เก็บถาวรและแตกไฟล์โดยไม่บันทึกไฟล์ลงดิสก์


62

ฉันต้องการดาวน์โหลดและแยกไฟล์เก็บถาวรภายใต้ไดเรกทอรีที่กำหนด นี่คือวิธีที่ฉันทำไปแล้ว:

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

ฉันต้องการดาวน์โหลดและแตกไฟล์เก็บถาวรทันทีโดยไม่ต้องtar.gzเขียนลงดิสก์ ฉันคิดว่าสิ่งนี้เป็นไปได้โดยการส่งออกwgetไปยังtarและให้tarเป้าหมาย แต่ในทางปฏิบัติฉันไม่ทราบวิธีการรวมชิ้นส่วนเข้าด้วยกัน

คำตอบ:


95

คุณสามารถทำได้โดยบอกwgetให้เอาท์พุทเพย์โหลดของมันไปที่ stdout (พร้อมแฟ-O-ล็ก) และควบคุมเอาท์พุทของตัวเอง (พร้อมแฟล็ก-q):

wget -qO- your_link_here | tar xvz -

ในการระบุไดเรกทอรีเป้าหมาย:

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

ปรับปรุง

หากคุณมี GNU tar

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

ควรอนุญาตให้คุณทำทั้งหมดในขั้นตอนเดียว

-q เงียบ

-O - ส่งออกไปยัง stdout


หากต้องการเส้นทางที่ระบุควรเป็น:wget -qO- your_link_here | tar xvz - -C /target/directory
Marslo

อาจแค่บอกให้คนใช้ tar แทนกันเลยเหรอ?
Alexander Mills

wget -qO- <url> | tar -xvz -C <target folder>ทำงานบน gnu tar
AlikElzin-kilaka

14

ตัวเลือกอื่นคือการใช้curlที่เขียนไปยัง stdout โดยค่าเริ่มต้น:

curl -s some_url | tar xvz -C /tmp

2
ฉันชอบตัวเลือกของคุณมากกว่าคนอื่น แต่curl -s some_url | tar xvz - -C /tmp
FiftiN

1
ตามที่FiftiNแนะนำ -> เช่นเพื่อดูรายชื่อไฟล์ที่ถูกกรองภายในที่เก็บหนึ่งสามารถใช้:$ curl -L https://api.github.com/repos/repo_owner/repo_name/tarball | tar tvfz - -C /tmp --wildcards *.py
Alex Glukhovtsev

11

Oneliner นี้ทำเคล็ดลับ:

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

คำอธิบายสั้น ๆ : ด้านขวาในวงเล็บจะถูกดำเนินการก่อน ( -qบอก wget ที่จะทำอย่างเงียบ ๆ-O -ใช้ในการเขียนผลลัพธ์ไปยัง stdout)

จากนั้นเราจะสร้างท่อตั้งชื่อโดยใช้กระบวนการประกอบการเปลี่ยนตัวจากทุบตี<(เพื่อสร้างไปป์ที่มีชื่อ วิธีนี้เราสร้างตัวให้คำอธิบายไฟล์ชั่วคราวจากนั้นสั่งเนื้อหาของ descriptor นั้นให้ tar โดยใช้<โอเปอเรเตอร์การเปลี่ยนเส้นทางไฟล์

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