ฉันกำลังพยายามดาวน์โหลดtar.gz
แพ็คเกจด้วยwget
ขยายไฟล์และเปลี่ยนชื่อไดเรกทอรีที่คลายบีบอัดทั้งหมดในคำสั่งเดียว (piped)
ความตั้งใจของฉันคือ
wget -O- $URL | tar fvxz - -C $DEST
wget -O- $URL | tar fvxz - | mv - $DEST
ฉันกำลังทำอะไรอยู่
ฉันกำลังพยายามดาวน์โหลดtar.gz
แพ็คเกจด้วยwget
ขยายไฟล์และเปลี่ยนชื่อไดเรกทอรีที่คลายบีบอัดทั้งหมดในคำสั่งเดียว (piped)
ความตั้งใจของฉันคือ
wget -O- $URL | tar fvxz - -C $DEST
wget -O- $URL | tar fvxz - | mv - $DEST
ฉันกำลังทำอะไรอยู่
คำตอบ:
หากคุณมี 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
--strip-components
f
แต่มีจำนวนมากการใช้งานที่แตกสลายที่มันไม่ บางที OP มีหนึ่งอัน