วิธีสร้างไฟล์เก็บถาวร tar แบ่งออกเป็นหลายไฟล์


27

ตามหน้านี้หนึ่งสามารถปล่อยให้ tar สร้าง "แยก" เก็บถาวร tar เป็นไฟล์ 100 Mb:

tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz

ปัญหาคือคำสั่งนี้จะทำให้คุณต้องให้ชื่อไฟล์แบบโต้ตอบสำหรับไฟล์ถัดไปหลังจากไฟล์แรกเต็มแล้ว

ใครรู้วิธีข้ามขั้นตอนแบบโต้ตอบนี้และให้ tar ทำ "แยก" โดยอัตโนมัติหรือไม่


เกี่ยวข้องกับสิ่งนี้: unix.stackexchange.com/q/61774/6860
sampablokuper

คำตอบ:


20

ลองดูที่--new-volume-scriptตัวเลือกซึ่งช่วยให้คุณเปลี่ยนกลไกการแสดงพร้อมกับกลไกที่แตกต่างกันหรือด้วยชื่อไฟล์ที่สร้างขึ้น ( (tar.info)Multi-Volume Archivesในtarหน้าข้อมูล) ปัญหาที่เกิดขึ้นsplitคือคุณต้องการให้catชิ้นส่วนต่างๆกลับมารวมกันเพื่อทำสิ่งใดขณะที่การเก็บแบบหลายตัวแปรควรมีความยืดหยุ่นมากกว่า


แน่นอนว่าเป็นเรื่องจริง
Eduardo I.

2
ขอบคุณนี่คือสิ่งที่ฉันกำลังมองหา! ตอนนี้ฉันพบว่ามีคำแนะนำบางอย่าง (รวมถึงตัวอย่าง) ที่นี่: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Samuel Lampa

ปัญหาของเรื่องนี้คือมันเกี่ยวข้องกับเรื่องไร้สาระมากเกินไปและส่งเสริมสิ่งที่ตรงกันข้ามกับแอพสไตล์ Unix ที่เหมาะสม
Jan Kyu Peblik

33

คุณสามารถใช้การแบ่งสำหรับสิ่งนี้:

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

สิ่งนี้บอกให้ tar ส่งข้อมูลไปยัง stdout และแยกเพื่อเลือกจาก stdin - นอกจากนี้ยังใช้ส่วนต่อท้ายที่เป็นตัวเลข ( -d) ขนาดก้อน ( -b) 100M และใช้ 'tardisk' เป็นฐานสำหรับชื่อไฟล์ที่ได้รับ (tardisk00, tardisk01) tardisk02 เป็นต้น)

เพื่อแยกข้อมูลหลังจากนั้นคุณสามารถใช้สิ่งนี้:

cat tardisk* | tar xzpvf -

1
การแก้ไขเล็ก ๆ-dนั้นใช้สำหรับคำต่อท้ายเป็นตัวเลขไม่ใช่คำนำหน้า
yclian

8

แน่นอนตัวเลือกที่ดีที่สุดที่จะใช้เป็น--new-volume-scriptตัวเลือก

แต่ถ้าคุณรู้ขนาดของไฟล์ (ในกรณีนี้คือ largefile.tgz) คุณสามารถทำได้เช่นกัน:

tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz

สรุป:

-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)

(สำหรับ -L ให้ระบุมากเท่าที่จำเป็นเพื่อให้ผลรวมของไฟล์ tar มีขนาดใหญ่กว่า largefile.tgz)

หากคุณพยายามที่จะtarโครงสร้างไดเรกทอรีต้นไม้


1

ฉันได้มันไปทำงานกับคำสั่งต่อไปนี้:

mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
    ./split/part_${TAR_VOLUME}.tar' \
    -f split/part_1.tar large_file.tar.gz

ปัญหาเพียงอย่างเดียวคือpart_1.tarไฟล์สุดท้ายจะเป็นไฟล์สุดท้ายและอีกไฟล์หนึ่งจะถูกเลื่อนไปทีละไฟล์ คือpart_2.tarเป็นจริงส่วนแรกและpart_k.tarเป็น(n - 1)วันที่มีส่วนร่วม แก้ไขสิ่งนี้ด้วยเชลล์สคริปบางอย่างเล็กน้อยและทิ้งไว้เป็นแบบฝึกหัดสำหรับผู้อ่าน


1

มันจะสร้างไฟล์ขนาด 1.1GB โดยอัตโนมัติหาก tar ของคุณมีขนาดใหญ่กว่าคุณสามารถเพิ่มจำนวนได้ตัวอย่างเช่น 1,000 {2..1000} หรือคุณสามารถเพิ่มอินพุตให้กับอาร์กิวเมนต์ความยาวเทป

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.