ฉันจะอัปเดตไฟล์ tar.gz ได้อย่างไร


32

ฉันสร้างไฟล์ tar.gz (โดยใช้ GUI ไม่ใช่บรรทัดคำสั่ง) ฉันจะอัปเดตได้อย่างไรด้วยคำสั่งว่ามีการเพิ่มไฟล์ใหม่และไฟล์ที่ถูกแก้ไขถูกอัพเดตด้วยเช่นกัน?


1
ดูเพิ่มเติมที่unix.stackexchange.com/questions/13093/…
Anatoly techtonik

คำตอบ:


28

ปกติแล้วคุณจะใช้แฟล็ก -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


2
OP ได้ถามเกี่ยวกับการอัปเดตไฟล์บีบอัดที่ไม่สามารถอัปเดตได้
QkiZ

18

โซลูชัน / วิธีแก้ปัญหา

คุณไม่สามารถอัปเดตไฟล์ TAR ที่บีบอัด ( .tar.gz ) ได้ในขั้นตอนเดียว แต่ถ้าคุณมีพื้นที่ว่างเพียงพอคุณสามารถทำได้:

  1. แตกไฟล์. tarจากไฟล์. tar.gz :

    gunzip filename.tar.gz

  2. อัพเดตไฟล์. tar ที่ไม่บีบอัดด้วยtar -uคำสั่ง:

    tar -uf filename.tar new_file

  3. บีบอัดไฟล์. tar ที่อัปเดต:

    gzip filename.tar

เร่งความเร็ว

หากคุณมีซีพียูแบบมัลติคอร์ฉันแนะนำให้ใช้pigzแทนgzipการแยกและสร้างไฟล์. gz ( pigzเป็นการใช้งานแบบมัลติเธรดของgzip )

เพียงแทนที่gzip/ gunzipคำสั่ง/pigzunpigz

คู่มือที่เกี่ยวข้อง


5

หากคุณต้องการอัปเดตไฟล์เฉพาะใน *.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เพื่อออกมาจากรายการไฟล์


1

หากคุณจะทำเช่นนี้ซ้ำ ๆ การเพิ่มประสิทธิภาพสามารถ:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.