ฉันจะแยกด้วย tar ไปยังไดเรกทอรีอื่นได้อย่างไร


18

สิ่งนี้ใช้ไม่ได้:

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

ไม่ชัดเจนสำหรับฉันว่าจะทำอะไรได้นอกเหนือจากการแตกไฟล์และย้ายไฟล์ไป

คำตอบ:


28

จาก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 นั้นเหมือนกันในแง่นี้โปรดดูที่ "การเปลี่ยนไดเรกทอรีทำงาน" ในคู่มือของมัน )


4
ผม reccommend เพื่อทดสอบพฤติกรรมนี้กับรุ่นที่ไม่ใช่ของ GNU tar หน้าโซลาริสด้วยตนเองกล่าวถึงตัวเลือกนี้ร่วมกับการเพิ่มและแทนที่เท่านั้น เป็นฉันอยากรู้อยากเห็นการทดสอบด้วยสารสกัดจากการดำเนินงาน Solaris ' tarไม่ได้ออกข้อผิดพลาดหรือคำเตือนใด ๆ และแตกไฟล์เก็บถาวรในโฟลเดอร์ปัจจุบัน =: - /
ktf

1
ยังใช้ไม่ได้กับ tar เวอร์ชัน AIX: 'File -C ไม่ปรากฏในไฟล์เก็บถาวร' - '-C' ใช้งานได้สำหรับการสร้าง tarball
DarkHeart

เป็นไปได้ไหมที่จะสลับไดเรกทอรีหลักด้วยชื่อใหม่?
tofutim

9

ถ้าคุณต้องการที่จะแยกเก็บ tar อื่น ๆ เพียงแค่cdไปยังไดเรกทอรีปลายทางและ Untar มันมี:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

คำสั่งที่คุณใช้จะค้นหาไฟล์foo/barในไฟล์เก็บถาวรและแตกไฟล์


9

การทำ:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

จะทำงาน

โดยทั่วไปสิ่งที่ทำคือการวางไข่เชลล์ใหม่ (วงเล็บ) ในเชลล์ย่อยนี้ให้เปลี่ยนไดเรกทอรีเป็นfoo/barแล้วยกเลิกการแยกไฟล์

คุณสามารถเปลี่ยน;โดย a &&เพื่อให้แน่ใจว่าcdทำงานได้ดี


1
ว้าวว่าคุณสามารถเริ่มต้นกระสุนได้แบบที่เจ๋ง! ฉันไม่รู้ว่าคุณทำได้
Kit Sunde

0
tar -xf ancd.tar.gz my/name/file

คุณสามารถตั้งชื่อไฟล์ได้./fileหลังจากไฟล์ tar

tar -xf ancd.tar.gz ./my/name/file

ถ้ามันคือการทำงานวิธีการที่คุณได้สร้าง tar ./กับ ใช้คำสั่งน้อยกว่าเพื่อดูเนื้อหาน้ำมันดิน

less ...tar.file  

0

ฉันพบสิ่งที่เป็นปัญหาที่คล้ายกันและแก้ไขมันแล้ว

ปัญหานี้เกิดขึ้นในการสร้างไฟล์มากกว่าสร้างไฟล์

เมื่อพยายามที่จะ 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

0

เปลี่ยนไดเรกทอรีที่คุณต้องการแยก

cd /u02/restore

ถ้าตำแหน่งของไฟล์แตกภายใต้ /u01/backup.tar แล้ว

แยกดังนี้:

cd /u02/restore
tar -xvf /u01/backup.tar

0

คำสั่ง:

tar -xzvf foo.tar.gz -C /home/user/bar/

จะแตกไฟล์อินพุต "foo.tar.gz" ลงในไดเรกทอรี/home/user/barขณะพิมพ์ไฟล์ที่ประมวลผล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.