Bagaimana saya bisa memperbarui file tar.gz?

32

Saya telah membuat file tar.gz (menggunakan GUI, bukan baris perintah). Bagaimana saya bisa memperbaruinya dengan perintah bahwa file baru ditambahkan dan file yang dimodifikasi juga diperbarui?

xpanta
sumber
1
Lihat juga unix.stackexchange.com/questions/13093/...
anatoly techtonik

Jawaban:

28

Anda biasanya menggunakan flag -u untuk ini. Dari halaman manual tar:

 -u, --update
       only append files newer than copy in archive

jadi urutan ini akan melakukan apa yang Anda butuhkan:

# 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

Untuk tampilan yang sedikit lebih detail, lihat di sini: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html

roadmr
sumber
2
OP bertanya tentang memperbarui arsip terkompresi yang tidak dapat diperbarui.
QkiZ
18

Solusi / Penanganan Masalah

Anda tidak dapat memperbarui arsip TAR terkompresi ( .tar.gz ) dalam satu langkah. Tetapi, jika Anda memiliki cukup ruang kosong, Anda dapat melakukan ini:

  1. Ekstrak file .tar dari file .tar.gz :

    gunzip filename.tar.gz

  2. Perbarui file .tar tanpa kompresi dengan tar -uperintah:

    tar -uf filename.tar new_file

  3. Kompres file .tar yang diperbarui :

    gzip filename.tar

Percepatan

Jika Anda memiliki CPU multi-core, saya sarankan untuk menggunakannya, pigzbukan gzipuntuk mengekstrak dan membuat file .gz . ( pigzadalah implementasi multi-utas gzip)

Cukup ganti gzip/ gunzipperintah ke pigz/ unpigz.

Manual terkait

andras.tim
sumber
5

Jika Anda ingin memperbarui file tertentu dalam *.tar.gzfile, lakukan saja hal berikut:

Masukkan vidari mana tarfile tersedia

/home>vi

Misalnya, jika Anda ingin memodifikasi simple.tar.gz yang berada di bawah /home/test/direktori:

/home/test>vi

Dan di editor kosong masukkan :n simple.tar.gzdan tekan Enter Anda akan mendapatkan daftar folder dan file memindahkan kursor di mana Anda ingin memodifikasi dan klik Enter. Akan ditampilkan vieditor file tertentu. Kemudian iopsi untuk mengubah file. Setelah perubahan berhasil. Tekan Esctombol dan pilih :wquntuk menulis dan keluar dari file. Kemudian gunakan :quntuk keluar dari daftar file.

priyanka
sumber
1

Jika Anda akan melakukan ini berulang kali, optimasi dapat berupa:

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
Shubham Chaudhary
sumber