Tar.gz dosyasını nasıl güncelleyebilirim?


Yanıtlar:


28

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


2
OP, güncellenemeyen sıkıştırılmış arşivin güncellenmesini istiyordu.
QkiZ

18

Çözüm / Geçici Çözüm

Sıkıştırılmış TAR arşivini ( .tar.gz ) bir adımda güncelleyemezsiniz. Ancak, yeterli boş alanınız varsa, bunu yapabilirsiniz:

  1. Özü .tar dosya .tar.gz dosyası:

    gunzip filename.tar.gz

  2. Sıkıştırılmamış .tar dosyasını aşağıdaki tar -ukomutu kullanarak güncelleyin :

    tar -uf filename.tar new_file

  3. Güncelleştirilmiş .tar dosyasını sıkıştırın :

    gzip filename.tar

Hızlanma

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.

İlgili kılavuzlar


5

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 .


1

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.