คำสั่งทุบตีไปป์


0

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

ความตั้งใจของฉันคือ

wget -O- $URL | tar fvxz - -C $DEST

wget -O- $URL | tar fvxz - | mv - $DEST

ฉันกำลังทำอะไรอยู่


1
มาตรฐานเป็นที่ชัดเจนว่าถูกดำเนินการไฟล์ไม่จำเป็นต้องปฏิบัติตามทันทีfแต่มีจำนวนมากการใช้งานที่แตกสลายที่มันไม่ บางที OP มีหนึ่งอัน
kojiro

คำตอบ:


0

หากคุณมี BSD หรือ GNU tar คุณสามารถทำได้:

mkdir -p "$DEST" && wget -O- "$URL" | tar --strip-components 1 -xvzf- -C "$DEST"

ตั้งแต่ GNU tar มี--strip-componentsแต่นั่นไม่ใช่โซลูชันมาตรฐาน อย่างไรก็ตามคุณไม่สามารถทำสิ่งนี้กับไปป์ไลน์เดียวเนื่องจากคุณต้องมีไดเรกทอรีอยู่แล้วและมีวิธีที่ดีอย่างสมบูรณ์แบบในการทำเช่นนี้หากคุณยินดีที่จะละทิ้งไปป์ไลน์เดียวทั้งหมด

mkdir -p "$DEST" &&
cd "$DEST" &&
wget -O- "$URL" | tar -xvzf-
cd * && # Assumes the result only has one directory
mv * .. # Assumes no dotfiles

คุณสามารถแก้ไขปัญหาของ dotfiles และ tars ของหลาย ๆ ไดเรกทอรีได้โดยการ tweaking คำตอบนี้ถ้าจำเป็น


การใช้zแฟล็กนี้แสดงถึง tar ที่ไม่ใช่โบราณและมากกว่า POSIX ขั้นต่ำ

@ WumpusQ.Wumbley การใช้ธงดูเหมือนจะไม่เพียงพอที่จะบ่งบอกถึงการดำรงอยู่ของz --strip-components
kojiro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.