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 -u
komutu 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 pigz
yerine gzip
ekstresi ve oluşturmak .gz dosyaları. ( pigz
çok iş parçacıklı bir uygulama gzip
)
Sadece gzip
/ gunzip
komutları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 vi
olduğ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.gz
tuş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. vi
Belirli bir dosyanın editörünü gösterecektir . Ardından i
dosyayı değiştirme seçeneği. Başarılı değişimden sonra. Tuşuna basın Escve :wq
dosyayı yazıp çıkmak için seçin . Ardından :q
dosya 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