วิธีคลายบีบอัด tar.gz ในไดเรกทอรีอื่น


270

ฉันมีที่เก็บถาวร

* .tar.gz

ฉันจะคลายการบีบอัดข้อมูลนี้ในไดเรกทอรีปลายทางได้อย่างไร


9
ทำไมต้องโหวตทั้งหมด มีตัวเลือกมากกว่าแค่ -C (และบางทีเวอร์ชั่นของเขาอาจไม่มีสิ่งนี้)
Alfe

2
Stack Overflow เป็นเว็บไซต์สำหรับคำถามการเขียนโปรแกรมและการพัฒนา คำถามนี้ดูเหมือนจะไม่ได้อยู่ที่หัวข้อเพราะมันไม่เกี่ยวกับการเขียนโปรแกรมหรือการพัฒนา ดูหัวข้อใดบ้างที่ฉันสามารถถามเกี่ยวกับที่นี่ในศูนย์ช่วยเหลือ บางทีผู้ใช้ระดับสูงหรือUnix & Linux Stack Exchangeอาจเป็นที่ที่ดีกว่าสำหรับการถาม
jww

@jww ในขณะที่ฉันเห็นจุดของคุณเรายังมีแท็กชื่อtarและgzรอบ ๆ ในนี้ฟอรั่ม การแยก tarball ลงในไดเรกทอรีเฉพาะสามารถเป็นส่วนหนึ่งของเชลล์สคริปต์ได้และเป็นส่วนหนึ่งของการเขียนโปรแกรม ฉันเดาคำถามประเภทนี้สามารถถามในฟอรั่มทั้งแล้ว
Alfe

คำตอบ:


319

คุณสามารถใช้ตัวเลือก-C(หรือ--directoryถ้าคุณชอบตัวเลือกยาว) เพื่อให้ไดเรกทอรีเป้าหมายที่คุณเลือกในกรณีที่คุณกำลังใช้รุ่น GNU tarของ ไดเรกทอรีควรมีอยู่:

mkdir foo
tar -xzf bar.tar.gz -C foo

หากคุณไม่ได้ใช้tarความสามารถในการแยกไปยังไดเรกทอรีที่เฉพาะเจาะจงคุณสามารถเพียงแค่cdลงในไดเรกทอรีเป้าหมายของคุณก่อนที่จะเรียกtar; จากนั้นคุณจะต้องให้เส้นทางที่สมบูรณ์ไปยังที่เก็บถาวรของคุณแน่นอน คุณสามารถทำสิ่งนี้ในเชลล์ย่อยการกำหนดขอบเขตเพื่อหลีกเลี่ยงการมีผลกับสคริปต์ที่อยู่โดยรอบ:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

หรือหากไม่ใช่พา ธ สัมบูรณ์หรือพา ธ สัมพัทธ์กับไฟล์เก็บถาวรคุณก็สามารถใช้สิ่งนี้เพื่อตั้งชื่อไฟล์เก็บถาวรนอกเชลล์ย่อย scoping:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz

107
gzip -dc archive.tar.gz | tar -xf - -C /destination

หรือกับ GNU tar

tar xzf archive.tar.gz -C /destination

3
ฉันชอบความคิดของการใช้gzipในกรณีที่ tar ไม่เข้าใจไฟล์บีบอัด
Alfe


0

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

if [ $# -ne 1 ];
 then
 echo "invalid argument/s"
 echo "Usage: ./script-file-name.sh /target/directory"
 exit 0
fi
for file in *.tar.gz
do
    tar -zxvf "$file" --directory $1
done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.