Yanıtlar:
Normalde bunun için -u bayrağını kullanırdın. Tar'ın adam sayfasından:
-u, --update only append files newer than copy in archive
bu yüzden bu dizi ihtiyacınız olanı yapacak:
# 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
Biraz daha ayrıntılı bir görünüm için buraya bakın: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html
Sıkıştırılmış TAR arşivini ( .tar.gz ) bir adımda güncelleyemezsiniz. Ancak, yeterli boş alanınız varsa, bunu yapabilirsiniz:
Özü .tar dosya .tar.gz dosyası:
gunzip filename.tar.gz
Sıkıştırılmamış .tar dosyasını aşağıdaki tar -ukomutu kullanarak güncelleyin :
tar -uf filename.tar new_file
Güncelleştirilmiş .tar dosyasını sıkıştırın :
gzip filename.tar
Eğer çok çekirdekli işlemci varsa, ben kullanmayı tavsiye pigzyerine gzipekstresi ve oluşturmak .gz dosyaları. ( pigzçok iş parçacıklı bir uygulama gzip)
Sadece gzip/ gunzipkomutlarını pigz/ ile değiştirin unpigz.
Dosyadaki belirli bir dosyayı güncellemek istiyorsanız *.tar.gz, aşağıdakileri yapmanız yeterlidir:
Dosyanın uygun violduğu yeri girintar
/home>vi
İçin örneğin, değiştirmek istiyorsan. Simple.tar.gz altındadır /home/test/dizinde:
/home/test>vi
Ve boş editörde enter :n simple.tar.gztuşuna basın Enter
ve klasörlerin listesini alacaksınız ve dosyaların imlecini değiştirmek istediğiniz yere getirin ve tıklayın Enter. viBelirli bir dosyanın editörünü gösterecektir . Ardından idosyayı değiştirme seçeneği. Başarılı değişimden sonra. Tuşuna basın Escve :wqdosyayı yazıp çıkmak için seçin . Ardından :qdosya listesinden çıkmak için kullanın .
Bunu tekrar tekrar yapacaksanız, bir optimizasyon olabilir:
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