ฉันสร้างไฟล์ tar.gz (โดยใช้ GUI ไม่ใช่บรรทัดคำสั่ง) ฉันจะอัปเดตได้อย่างไรด้วยคำสั่งว่ามีการเพิ่มไฟล์ใหม่และไฟล์ที่ถูกแก้ไขถูกอัพเดตด้วยเช่นกัน?
ฉันสร้างไฟล์ tar.gz (โดยใช้ GUI ไม่ใช่บรรทัดคำสั่ง) ฉันจะอัปเดตได้อย่างไรด้วยคำสั่งว่ามีการเพิ่มไฟล์ใหม่และไฟล์ที่ถูกแก้ไขถูกอัพเดตด้วยเช่นกัน?
คำตอบ:
ปกติแล้วคุณจะใช้แฟล็ก -u สำหรับสิ่งนี้ จากหน้าคนของ tar:
-u, --update only append files newer than copy in archive
ดังนั้นลำดับนี้จะทำสิ่งที่คุณต้องการ:
# First create the tar file. It has to be UNCOMPRESSED for -u to work
tar -cvf my.tar some-directory/
# ... update some files in some-directory
# ... add files in some-directory
# Now update only the changed and added files
tar -uvf my.tar some-directory/
# Compress if desired
gzip my.tar
สำหรับรายละเอียดเพิ่มเติมเล็กน้อยดูที่นี่: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html
คุณไม่สามารถอัปเดตไฟล์ TAR ที่บีบอัด ( .tar.gz ) ได้ในขั้นตอนเดียว แต่ถ้าคุณมีพื้นที่ว่างเพียงพอคุณสามารถทำได้:
แตกไฟล์. tarจากไฟล์. tar.gz :
gunzip filename.tar.gz
อัพเดตไฟล์. tar ที่ไม่บีบอัดด้วยtar -u
คำสั่ง:
tar -uf filename.tar new_file
บีบอัดไฟล์. tar ที่อัปเดต:
gzip filename.tar
หากคุณมีซีพียูแบบมัลติคอร์ฉันแนะนำให้ใช้pigz
แทนgzip
การแยกและสร้างไฟล์. gz ( pigz
เป็นการใช้งานแบบมัลติเธรดของgzip
)
เพียงแทนที่gzip
/ gunzip
คำสั่ง/pigz
unpigz
หากคุณต้องการอัปเดตไฟล์เฉพาะใน *.tar.gz
ไฟล์ให้ทำดังต่อไปนี้:
ป้อนvi
จากที่tar
ไฟล์พร้อมใช้งาน
/home>vi
ตัวอย่างเช่นหากคุณต้องการแก้ไขsimple.tar.gzซึ่งอยู่ภายใต้/home/test/
ไดเรกทอรี:
/home/test>vi
และในการแก้ไขที่ว่างเปล่าใส่:n simple.tar.gz
และกดEnter
คุณจะได้รับรายชื่อของโฟลเดอร์และไฟล์เลื่อนเคอร์เซอร์ไปที่ u Enterต้องการที่จะแก้ไขและคลิก มันจะแสดงvi
บรรณาธิการของไฟล์โดยเฉพาะ จากนั้นi
ตัวเลือกเพื่อเปลี่ยนไฟล์ หลังจากประสบความสำเร็จในการเปลี่ยนแปลง กดEscปุ่มและเลือกที่:wq
จะเขียนและออกจากไฟล์ จากนั้นใช้:q
เพื่อออกมาจากรายการไฟล์
หากคุณจะทำเช่นนี้ซ้ำ ๆ การเพิ่มประสิทธิภาพสามารถ:
if [[ -f my.tar.gz ]]; then
if [[ ! -f my.tar ]]; then
echo 'No tar, unzipping tar.gz'
gunzip my.tar.gz
fi
tar -uvf my.tar file1 file2 file_new
gzip -fk my.tar # This keeps a copy of the tar.
# -f --force overwrite existing .tar.gz
# -k --keep Keep the input file (.tar file)
else
tar -cvzf my.tar.gz file1 file2
fi