เพิ่ม / อัปเดตไฟล์ไปยังที่เก็บถาวร tar.gz หรือไม่


73

มีวิธีเพิ่ม / อัปเดตไฟล์ในไฟล์เก็บถาวร tar.gz หรือไม่ โดยทั่วไปฉันมีไฟล์เก็บถาวรซึ่งมีไฟล์อยู่/data/data/com.myapp.backup/./files/settings.txtและฉันต้องการดึงไฟล์นั้นจากไฟล์เก็บถาวร (เรียบร้อยแล้ว) และดันกลับเข้าไปในไฟล์เก็บถาวรเมื่อทำการแก้ไขเสร็จแล้ว ฉันจะทำสิ่งนี้ได้อย่างไร มันเป็นปัญหา.หรือเปล่าเพราะอยู่ในเส้นทาง?


2
+1 สิ่งนี้จะทำให้การทำงานบน OS X เป็นเรื่องง่าย ขณะนี้ฉันต้องทำความสะอาดไดเรกทอรีของไฟล์ที่ถูกซ่อนเช่น.DS_Storeและจากนั้นรีไดเรกทอรี

คำตอบ:


15

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

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

ตัวเลือกแรกที่หนึ่งจะเป็นarchivemountโครงการFUSE นี่คือการสอนว่า ระบบของคุณอาจมี FUSE อยู่แล้วและหากไม่ใช่การแจกจ่ายของคุณควรมีตัวเลือกสำหรับมัน

ตัวเลือกอื่น ๆtarfs มันใช้งานง่ายกว่าแต่ฉันได้ยินมาว่ามีปัญหาบางอย่างกับการเก็บถาวร bzip2 ดังนั้นคุณอาจทดสอบมันอย่างละเอียดก่อน


1
ฉันใช้AVFSซึ่งบรรจุใน Ubuntu และ Debian คุณรู้หรือไม่ว่าที่เก็บถาวรและ tarfs เปรียบเทียบกับ AVFS อย่างไร
Gilles

ไม่ฉันทำไม่ได้ถึงแม้ว่าฉันอยากรู้อยากเห็น AVFS ตอนนี้ที่คุณพูดถึงทางเลือก ฉันใช้ทั้งเก็บถาวรและ tarfs แต่มันเป็นเวลานานตั้งแต่โครงการเลิกใช้และไม่ทราบสถานะปัจจุบันของพวกเขา ฉันตัดสินใจจากประสบการณ์นั้นว่าความคิดนั้นผิดแนวคิดแม้ว่าการใช้งานจะสมบูรณ์แบบก็ตาม
Caleb

ฉันดูที่การทำงานของที่เก็บถาวร มันไม่ได้แก้ไขไฟล์. tar.gz ที่มีอยู่ แต่เมื่อคุณยกเลิกการต่อเชื่อมมันจะเปลี่ยนชื่อไฟล์ต้นฉบับและสร้างไฟล์ tar ใหม่แทน หากคุณกำลังมองหาประสบการณ์การใช้งานที่ดีมันยอดเยี่ยม แต่ถ้าคุณต้องการหลีกเลี่ยงการเขียนที่เก็บถาวรทั้งหมดใหม่เพื่อเหตุผลด้านประสิทธิภาพมันจะไม่ช่วยคุณ
Jander

@ Jander นั่นคือการชี้ให้เห็น ฉันค่อนข้างมั่นใจว่ามันใช้ได้กับตัวเลือกการติดตั้งการบีบอัดข้อมูลแบบถาวรทั้งหมด ปัญหาคือส่วนต่าง ๆ ของไฟล์ไม่ถูกบีบอัดส่วนหัวภายในไฟล์โดยรวมและทั้งหมดถูกบีบอัดและเพื่อให้สิ่งอื่น ๆ ในการแยกเป็น gzip ที่คาดว่าจะต้องทำงานมากกว่าชุดข้อมูลทั้งหมด ไม่มีวิธีการแทรกสิ่งที่อยู่ตรงกลางนี้โดยไม่ต้องแยกออกและเรียกใช้การบีบอัดและเขียนไฟล์ข้อมูลทั้งหมดอีกครั้ง ดังนั้นความคิดเห็นก่อนหน้าของฉันเกี่ยวกับมันเป็นวิธีการแก้ปัญหาที่ไม่ถูกต้องแนวคิด จดหมายเหตุเป็นจดหมายเหตุ
Caleb

43

tar xzf archive.tar.gz my/path/to/file.txtที่จะดึงไฟล์ของคุณจากที่เก็บของคุณคุณสามารถใช้ โปรดทราบว่าไดเรกทอรีในเส้นทางของไฟล์จะถูกสร้างขึ้นเช่นกัน ใช้tar t(เช่นtar tzf archive.tar.gz) เพื่อแสดงรายการไฟล์ในไฟล์เก็บถาวร

tarไม่รองรับการอัปเดตไฟล์ "แบบแทนที่" อย่างไรก็ตามคุณสามารถเพิ่มไฟล์ในตอนท้ายของการเก็บถาวรแม้ว่าพวกเขาจะมีเส้นทางเดียวกันกับไฟล์ที่มีอยู่แล้วในการเก็บถาวร ในกรณีนั้นทั้งสองไฟล์จะอยู่ในไฟล์เก็บถาวรและไฟล์ที่เพิ่มในภายหลังจะแทนที่ไฟล์ก่อนหน้า คำสั่งที่ใช้สำหรับสิ่งนี้คือtar r(หรือtar uเพื่อเพิ่มเฉพาะไฟล์ที่ใหม่กว่าไฟล์เก็บถาวร) คือคำสั่งที่จะใช้ .ในเส้นทางที่ไม่ควรจะมีปัญหา

มีการจับเป็น: คุณไม่สามารถเพิ่มลงในการบีบอัดข้อมูล ดังนั้นคุณจะต้องทำ:

gunzip archive.tar.gz
tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt
gzip archive.tar

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


คำตอบนี้ถูกต้องตราบเท่าที่มันเกี่ยวข้องกับtarโปรแกรมมาตรฐาน Tar เป็นรูปแบบไฟล์สามารถเข้าถึงได้จริงมาก คุณสามารถจะเขียนสคริปต์เพื่อปรับปรุงเนื้อหาด้วยตัวเอง แต่ยังมีเครื่องมืออื่น ๆ ที่มีอยู่แล้วทำเช่นนี้
Caleb

23
คุณสามารถทำสิ่งนี้ได้ด้วยวิธียูนิกซ์:gzip -dc archive.tar.gz | tar -r data/data/com.myapp.backup/./files/settings.txt | gzip >archive_new.tar.gz
Simon Richter

2
IIRC คุณสามารถต่อไฟล์ gzip'ed สองไฟล์เข้าด้วยกัน ผลลัพธ์คือไฟล์ gzip'ed ที่มีขนาดใหญ่กว่าซึ่งมีทั้งไฟล์ที่ไม่บีบอัด
FUZxxl

เมื่อคลายซิปไฟล์แล้วจะใช้แฟล็ก --update ไม่ได้หรือไม่
เปียโตร

@FUZxxl +1 สำหรับการกล่าวถึงการต่อกัน gzip
Johan Boulé

9

เดิมทีทาร์ตั้งใจจะใช้สำหรับเทปดังนั้น "การแทนที่" ไฟล์จึงไม่ได้อยู่ในการออกแบบ อย่างไรก็ตามคุณสามารถใช้ - ลบเพื่อลบไฟล์ออกจาก tar เดิมและ -u เพื่ออัปเดต tar และเพิ่มไฟล์อีกครั้ง อาจใช้เวลาสักครู่เนื่องจาก tar จำเป็นต้องจัดระเบียบไฟล์เก็บถาวรใหม่ภายใน


ยินดีต้อนรับสู่ StackExchange! คำตอบของคุณมีคำแนะนำที่ทำไว้แล้วในคำตอบอื่นเท่านั้น โปรดอ่านคำตอบอื่น ๆ ของคำถามก่อนตอบเพื่อหลีกเลี่ยงการสร้างข้อมูลซ้ำ
JigglyNaga

1
ฉันแก้ไขคำตอบของฉันเล็กน้อย ฉันไม่คิดว่าคำตอบอื่น ๆ จะกล่าวถึง - ลบ
rleibman

-5

บน Linux x86_64 GNU / Linux ของฉันเพื่อดำเนินการนั้นฉันใช้เพียงคำสั่งต่อไปนี้:

tar cvfpz /path/archive.tar -T list.txt

คำสั่งนี้ทำให้เกิดการสร้างไฟล์เก็บถาวรที่บีบอัดภายใต้การ/pathใช้รายการไฟล์ที่รวมอยู่ในlist.txtไฟล์


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