เนื่องจากไฟล์ tar เป็นรูปแบบการสตรีมคุณสามารถรวมcat
สองไฟล์เข้าด้วยกันและได้ผลลัพธ์ที่เกือบจะถูกต้องคุณไม่จำเป็นต้องแตกไฟล์ลงในดิสก์เลย คุณสามารถแตกไฟล์ (เท่านั้น) รวมไฟล์เข้าด้วยกันและบีบอัดสตรีมนั้นใหม่:
xzcat *.tar.xz | xz -c > combined.tar.xz
combined.tar.xz
จะเป็น tarball บีบอัดของไฟล์ทั้งหมดใน tarballs องค์ประกอบที่เสียหายเพียงเล็กน้อยเท่านั้น ในการแยกคุณจะต้องใช้--ignore-zeros
ตัวเลือก (ใน GNU tar
) เนื่องจากไฟล์เก็บถาวรมีเครื่องหมาย "สิ้นสุดไฟล์" ที่จะปรากฏขึ้นตรงกลางของผลลัพธ์ นอกเหนือจากนั้นทุกอย่างจะทำงานได้อย่างถูกต้อง
GNU tar
ยังรองรับ--concatenate
โหมดสำหรับการสร้างคลังเก็บรวม ที่มีข้อ จำกัด เช่นเดียวกับข้างต้น - คุณต้องใช้--ignore-zeros
เพื่อแยก - แต่มันไม่ทำงานกับคลังเก็บบีบอัด คุณสามารถสร้างบางสิ่งบางอย่างขึ้นมาเพื่อหลอกให้มันทำงานโดยใช้การทดแทนกระบวนการ แต่มันยุ่งยากและเปราะบางยิ่งขึ้น
หากมีไฟล์ที่ปรากฏมากกว่าหนึ่งครั้งในไฟล์ tar ที่แตกต่างกันสิ่งนี้จะไม่ทำงานอย่างถูกต้อง แต่คุณประสบปัญหานั้นโดยไม่คำนึงถึง มิฉะนั้นสิ่งนี้จะให้สิ่งที่คุณต้องการ - การส่งออกท่อผ่านxz
เป็นวิธีการtar
บีบอัดเอาท์พุทของมันต่อไป
หากไฟล์เก็บถาวรที่ใช้งานได้กับการtar
ใช้งานเฉพาะนั้นไม่เพียงพอสำหรับจุดประสงค์ของคุณการผนวกไฟล์เก็บถาวรด้วยr
คือเพื่อนของคุณ:
tar cJf combined.tar.xz dummy-file
for x in db-*.tar.xz
do
mkdir tmp
pushd tmp
tar xJf "../$x"
tar rJf ../combined.tar.xz .
popd
rm -r tmp
done
สิ่งนี้จะแตกไฟล์ครั้งเดียวในแต่ละครั้งดังนั้นพื้นที่ทำงานจะถูก จำกัด ขนาดของเนื้อหาของไฟล์เก็บถาวรเดียว การบีบอัดคือการสตรีมเช่นเดียวกับที่คุณเคยทำไฟล์เก็บถาวรสุดท้ายทั้งหมดในครั้งเดียวดังนั้นมันจะดีเท่าที่เคยเป็นมา คุณทำการคลายการบีบอัดส่วนเกินและการบีบอัดซ้ำที่มากเกินไปซึ่งจะทำให้การทำงานนี้ช้ากว่าcat
เวอร์ชั่นต่าง ๆ แต่การเก็บถาวรที่เป็นผลลัพธ์จะทำงานได้ทุกที่โดยไม่มีการสนับสนุนพิเศษใด ๆ
โปรดทราบว่า - ขึ้นอยู่กับสิ่งที่คุณต้องการเพียงแค่เพิ่มไฟล์ tar ที่ไม่มีการบีบอัดด้วยตัวเองลงในไฟล์เก็บถาวรอาจพอเพียง พวกเขาจะบีบอัด (เกือบ) รวมทั้งเนื้อหาในไฟล์เดียวและจะลดค่าใช้จ่ายในการบีบอัดสำหรับแต่ละไฟล์ นี่จะดูเหมือน:
tar cJf combined.tar.xz dummy-file
for x in db-*.tar.xz
do
xz -dk "$x"
tar rJf combined.tar.xz "${x%.xz}"
rm -f "${x%.xz}"
done
สิ่งนี้มีประสิทธิภาพน้อยกว่าเล็กน้อยในแง่ของขนาดที่บีบอัดสุดท้ายเนื่องจากมีส่วนหัว tar เพิ่มเติมในสตรีม แต่ประหยัดเวลาในการแตกไฟล์และเพิ่มไฟล์ทั้งหมดเป็นไฟล์อีกครั้ง คุณจะพบว่าcombined.tar.xz
มีdb-*.tar
ไฟล์จำนวนมาก (ไม่บีบอัด)