สิ่งนี้ใช้ไม่ได้:
tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive
ไม่ชัดเจนสำหรับฉันว่าจะทำอะไรได้นอกเหนือจากการแตกไฟล์และย้ายไฟล์ไป
สิ่งนี้ใช้ไม่ได้:
tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive
ไม่ชัดเจนสำหรับฉันว่าจะทำอะไรได้นอกเหนือจากการแตกไฟล์และย้ายไฟล์ไป
คำตอบ:
จากman tar
:
-C directory
In c and r mode, this changes the directory before adding the
following files. In x mode, change directories after opening the
archive but before extracting entries from the archive.
เช่นtar xC /foo/bar -f /tmp/foo.tar.gz
ควรทำงาน (บน FreeBSD แต่ GNU tar นั้นเหมือนกันในแง่นี้โปรดดูที่ "การเปลี่ยนไดเรกทอรีทำงาน" ในคู่มือของมัน )
ถ้าคุณต้องการที่จะแยกเก็บ tar อื่น ๆ เพียงแค่cdไปยังไดเรกทอรีปลายทางและ Untar มันมี:
mkdir -p foo/bar
cd foo/bar
tar xzvf /tmp/foo.tar.gz
คำสั่งที่คุณใช้จะค้นหาไฟล์foo/bar
ในไฟล์เก็บถาวรและแตกไฟล์
การทำ:
(cd foo/bar ; tar xf /tmp/foo.tar.gz )
จะทำงาน
โดยทั่วไปสิ่งที่ทำคือการวางไข่เชลล์ใหม่ (วงเล็บ) ในเชลล์ย่อยนี้ให้เปลี่ยนไดเรกทอรีเป็นfoo/bar
แล้วยกเลิกการแยกไฟล์
คุณสามารถเปลี่ยน;
โดย a &&
เพื่อให้แน่ใจว่าcd
ทำงานได้ดี
tar -xf ancd.tar.gz my/name/file
คุณสามารถตั้งชื่อไฟล์ได้./file
หลังจากไฟล์ tar
tar -xf ancd.tar.gz ./my/name/file
ถ้ามันคือการทำงานวิธีการที่คุณได้สร้าง tar ./
กับ ใช้คำสั่งน้อยกว่าเพื่อดูเนื้อหาน้ำมันดิน
less ...tar.file
ฉันพบสิ่งที่เป็นปัญหาที่คล้ายกันและแก้ไขมันแล้ว
ปัญหานี้เกิดขึ้นในการสร้างไฟล์มากกว่าสร้างไฟล์
เมื่อพยายามที่จะ tar และถ่ายโอนไฟล์ใน dir A ฉันให้เส้นทางไปยังไฟล์ต้นฉบับในคำสั่ง tar
tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*
สิ่งที่ฉันสามารถแก้ไขได้คือ
cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*
ในการโอนและแยก tarball ส่วนย่อยที่ต้องการจะถูกสร้างขึ้น
tar -xvf MyFile.tar
เปลี่ยนไดเรกทอรีที่คุณต้องการแยก
cd /u02/restore
ถ้าตำแหน่งของไฟล์แตกภายใต้ /u01/backup.tar แล้ว
แยกดังนี้:
cd /u02/restore
tar -xvf /u01/backup.tar
คำสั่ง:
tar -xzvf foo.tar.gz -C /home/user/bar/
จะแตกไฟล์อินพุต "foo.tar.gz" ลงในไดเรกทอรี/home/user/bar
ขณะพิมพ์ไฟล์ที่ประมวลผล