สิ่งนี้ใช้ไม่ได้:
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ขณะพิมพ์ไฟล์ที่ประมวลผล