การสร้างไฟล์เก็บถาวร tar โดยไม่รวมไดเร็กทอรีพาเรนต์เมื่อไฟล์ถูกเก็บในไดเร็กทอรีอื่น


11

ฉันมีสี่ไฟล์ต่อไปนี้ในระบบไฟล์:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

ฉันต้องใส่ไฟล์เหล่านั้นลงในไฟล์เก็บถาวร tar แต่ฉันไม่ต้องการเพิ่มไดเรกทอรี สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

นี่ยังไม่สมบูรณ์เพราะแต่ละไฟล์ในไฟล์เก็บถาวรมีสองไดเรกทอรีที่ลึก มีวิธีที่ดีกว่า? หรือไม่ผมก็ต้องคัดลอกs1, s2, r3และr5ไฟล์ลงในไดเรกทอรีหนึ่งและสร้างที่เก็บด้วยtar -czvf archive.tgz s1 s2 r3 r5?

คำตอบ:


17

คุณสามารถใช้-Cหลาย ๆ ครั้ง (ย้ายจากไดเรกทอรีหนึ่งไปยังอีก):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

โปรดทราบว่าแต่ละ-Cตัวเลือกจะถูกแปลความสัมพันธ์กับไดเรกทอรีปัจจุบันณ จุดนั้น (หรือคุณสามารถใช้เส้นทางแบบสัมบูรณ์)


11

หากคุณมีรายการไฟล์ในไฟล์หรือสามารถสร้างโดยใช้คำสั่งคุณสามารถใช้คำสั่ง GNU tar เดียว:

tar cf foo.tar -T list-of-files --transform 's:.*/::'

การแปลงยังคงเก็บไดเรกทอรี แต่ทำให้เค้าโครงเรียบสนิท ดังนั้นคุณต้องมีวิธีการกรองไดเรกทอรีดังนั้นจึงจำเป็นต้องมีรายการไฟล์


8

คุณสามารถต่อท้ายไฟล์ลงในไฟล์เก็บถาวรทีละไฟล์:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

คุณสามารถสคริปต์สิ่งนี้เพื่อให้ง่ายขึ้น: สำหรับแต่ละพา ธ ให้รันtar rfด้วยไดเร็กทอรีฐานเป็นค่าสำหรับ-Cพารามิเตอร์และชื่อไฟล์ฐานโดยไม่มีพา ธ เพื่อเพิ่ม

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