Jawaban:
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
Anda tidak dapat memperbarui arsip TAR terkompresi ( .tar.gz ) dalam satu langkah. Tetapi, jika Anda memiliki cukup ruang kosong, Anda dapat melakukan ini:
Ekstrak file .tar dari file .tar.gz :
gunzip filename.tar.gz
Perbarui file .tar tanpa kompresi dengan tar -u
perintah:
tar -uf filename.tar new_file
Kompres file .tar yang diperbarui :
gzip filename.tar
Jika Anda memiliki CPU multi-core, saya sarankan untuk menggunakannya, pigz
bukan gzip
untuk mengekstrak dan membuat file .gz . ( pigz
adalah implementasi multi-utas gzip
)
Cukup ganti gzip
/ gunzip
perintah ke pigz
/ unpigz
.
Jika Anda ingin memperbarui file tertentu dalam *.tar.gz
file, lakukan saja hal berikut:
Masukkan vi
dari mana tar
file 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.gz
dan tekan Enter
Anda akan mendapatkan daftar folder dan file memindahkan kursor di mana Anda ingin memodifikasi dan klik Enter. Akan ditampilkan vi
editor file tertentu. Kemudian i
opsi untuk mengubah file. Setelah perubahan berhasil. Tekan Esctombol dan pilih :wq
untuk menulis dan keluar dari file. Kemudian gunakan :q
untuk keluar dari daftar file.
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