ฉันมีบรรทัดที่ง่ายมากในสคริปต์ทุบตีซึ่งดำเนินการสำเร็จ (เช่นการผลิต_data.tar
ไฟล์) ยกเว้นว่าจะไม่แยกไดเรกทอรีย่อยที่มีการบอกว่าไม่รวมผ่าน--exclude
ตัวเลือก:
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
แต่จะสร้าง_data.tar
ไฟล์ที่มีทุกอย่างภายใต้ / data รวมถึงไฟล์ในไดเรกทอรีย่อยที่ฉันต้องการยกเว้น
มีความคิดอะไรไหม และจะแก้ไขได้อย่างไร
อัปเดตฉันใช้การสังเกตของฉันตามลิงก์ที่ให้ไว้ในคำตอบแรกด้านล่าง (dir ระดับสูงสุดก่อนไม่มีช่องว่างหลังจากยกเว้นครั้งสุดท้าย):
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
แต่นั่นไม่ได้ช่วย ไดเร็กทอรีย่อย "ที่แยกออก" ทั้งหมดมีอยู่ใน_data.tar
ไฟล์ผลลัพธ์
นี่ทำให้งง ไม่ว่าจะเป็นข้อผิดพลาดใน tar ปัจจุบัน (GNU tar 1.23, บน CentOS 6.2, Linux 2.6.32) หรือ "ความไวสูง" ของ tar ไปยังช่องว่างและการพิมพ์ผิดพลาดอื่น ๆ ง่าย ๆ ฉันถือว่าข้อผิดพลาดนี้ สำหรับตอนนี้.
นี่มันแย่มาก : ฉันลองใช้ความเห็นที่แนะนำด้านล่าง (ไม่มีส่วนท้าย/*
) และยังไม่สามารถใช้งานได้ในสคริปต์การผลิต:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
ฉันไม่เห็นความแตกต่างระหว่างสิ่งที่ฉันลองและสิ่งที่ @Richard Perrin ลองยกเว้นราคาและ 2 ช่องว่างแทน 1 ฉันจะลองสิ่งนี้ (ต้องรอให้สคริปต์ทุกคืนทำงานเป็นไดเรกทอรีที่จะสำรองข้อมูล ขึ้นมาก) และรายงานกลับ
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
ฉันเริ่มที่จะคิดว่าความtar --exclude
ไวเหล่านี้ทั้งหมดไม่ใช่น้ำมันดิน แต่มีอะไรบางอย่างในสภาพแวดล้อมของฉัน
มันได้ผล! ความพยายามครั้งสุดท้าย (ไม่มีเครื่องหมายคำพูดเดี่ยวและเว้นวรรคเดียวแทนการเว้นวรรคสองครั้งระหว่างการ--exclude
ทดสอบ) แปลก แต่ก็ยอมรับ
เหลือเชื่อ! ปรากฎว่ารุ่นเก่ากว่าของtar
(1.15.1) จะยกเว้นเฉพาะในกรณีที่ dir ระดับบนสุดเป็นบรรทัดสุดท้ายในบรรทัดคำสั่ง ตรงข้ามกับที่เวอร์ชั่น 1.23 ต้องการ FYI