ฉันมีคำสั่งต่อไปนี้ในส่วนของเชลล์สคริปต์สำรอง:
tar -cjf site1.bz2 /var/www/site1/
เมื่อฉันแสดงรายการเนื้อหาของไฟล์เก็บถาวรฉันจะได้รับ:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
แต่ฉันต้องการที่จะลบส่วน/var/www/site1
จากไดเรกทอรีและชื่อไฟล์ภายในที่เก็บเพื่อลดความยุ่งยากในการสกัดและหลีกเลี่ยงโครงสร้างไดเรกทอรีคงที่ไร้ประโยชน์ ไม่เคยรู้ในกรณีที่ฉันจะแยกเว็บไซต์ที่/var/www
สำรองไว้ในที่ที่ไม่มีการจัดเก็บข้อมูลเว็บไว้
สำหรับตัวอย่างข้างต้นฉันต้องการ:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
ดังนั้นเมื่อฉันแตกไฟล์จะถูกแตกในไดเรกทอรีปัจจุบันและฉันไม่จำเป็นต้องย้ายไฟล์ที่ถูกแยกหลังจากนั้นและเพื่อให้โครงสร้างไดเรกทอรีย่อยถูกเก็บรักษาไว้
มีคำถามมากมายเกี่ยวกับ tar และการสำรองข้อมูลในstackoverflow
และที่อื่น ๆ บนเว็บ แต่ส่วนใหญ่ขอให้วางโครงสร้างไดเรกทอรีย่อยทั้งหมด (แบน) หรือเพียงแค่เพิ่มหรือลบชื่อเริ่มต้น / ในชื่อ (I don ' ไม่รู้ว่ามันจะเปลี่ยนไปเมื่อสกัด) แต่ไม่มาก
หลังจากอ่านคำตอบบางส่วนที่พบที่นี่และที่นั่นพร้อมกับคู่มือแล้วฉันลอง:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
แต่ไม่มีพวกเขาทำงานตามที่ฉันต้องการ บางคนไม่ทำอะไรเลยบางคนไม่เก็บถาวรไดเรกทอรีย่อยอีกต่อไป
มันอยู่ในเชลล์สำรองสคริปต์ที่เปิดตัวโดย Cron ดังนั้นฉันจึงไม่ทราบว่าผู้ใช้รายไหนพา ธ และไดเรกทอรีปัจจุบันคืออะไรดังนั้นจึงจำเป็นต้องเขียนเส้นทางที่แน่นอนสำหรับทุกสิ่งและไม่ต้องการเปลี่ยนไดเรกทอรีปัจจุบัน เพื่อหลีกเลี่ยงการทำลายบางสิ่งบางอย่างเพิ่มเติมในสคริปต์ (เพราะมันไม่ได้เป็นเพียงแค่เว็บไซต์สำรองข้อมูล แต่ยังรวมถึงฐานข้อมูลแล้วส่งสิ่งนั้นไปยัง FTP ฯลฯ )
ทำอย่างไรจึงจะได้สิ่งนี้?
ฉันเพิ่งเข้าใจผิดว่าตัวเลือก -C ทำงานอย่างไร
-C
ก็หมายความว่า "การเปลี่ยนแปลงไดเรกทอรี" ในขณะที่การเปลี่ยนเส้นทาง (หรือ prefixing) --transform
สามารถทำได้โดยเฉพาะ Rif superuser.com/questions/595510/prepend-prefix-in-tar/595512คุณสามารถง่าย -C (เปลี่ยนไดเรกทอรี) และ - เปลี่ยนรูปมัน: `` tar tar cjf site1.bz2 --transform "s / ^ \. \ // $ targetbase / "-C / var / www / site1 `` `