it-swarm-tr.com

Mevcut bir tar.gz arşivine dosya eklensin / güncellensin mi?

Tar.gz arşivine dosya eklemenin/güncellemenin bir yolu var mı? Temel olarak, /data/data/com.myapp.backup/./files/settings.txt 'Da bir dosya içeren bir arşivim var ve bu dosyayı arşivden (zaten yapılmış) çekmek ve düzenleme yapıldıktan sonra tekrar arşive geri itmek istiyorum. Bunu nasıl başarabilirim? Yoldaki . Nedeniyle sorunlu mu?

78
Naftuli Kay

Tar dosya formatı sadece birkaç başlık ile birleştirilmiş dosya serisidir. Onu parçalamak, içeriklerinizi koymak ve tekrar bir araya getirmek çok karmaşık bir iş değil. Olduğu söyleniyor, Jander açıkladı bir program olarak katran bunu yapmak için yardımcı işlevlere sahip değildir ve sıkıştırmadan önce ve sonra bir değişiklik yapması gereken ek komplikasyonlar vardır.

Ancak, iş için araçlar var! Sıkıştırılmış katran arşivinin geri döngü montajını bir klasöre yapmanıza ve daha sonra dosya sisteminde değişiklik yapmanıza izin verecek en az iki sistem var. İşiniz bittiğinde klasörü çıkarın ve sıkıştırılmış arşiviniz aktarılmaya hazırdır.

İlk seçenek Sigorta için archivemount projesi olacaktır. İşte bununla ilgili bir eğitim . Sisteminizde muhtemelen Sigorta var ve eğer yoksa dağıtımınız için bir seçenek olmalıdır.

Diğer seçenek tarfs . Bu kullanımı daha kolay , ama bzip2 arşivlerini bozmakla ilgili bir sorun yaşadığını duydum, bu yüzden önce bunu iyice test edebilirsiniz.

18
Caleb

Dosyanızı arşivinizden almak için tar xzf archive.tar.gz my/path/to/file.txt Kullanabilirsiniz. Dosya yolundaki dizinlerin de oluşturulacağını unutmayın. Arşivdeki dosyaları listelemek için tar t Kullanın (yani tar tzf archive.tar.gz).

tar dosyaların "yerinde" güncellenmesini desteklemez. Ancak, arşivde bulunan bir dosyayla aynı yola sahip olsalar bile, arşivin sonuna dosya ekleyebilirsiniz. Bu durumda, dosyanın her iki kopyası da arşivde olur ve daha sonra eklenen dosya öncekini geçersiz kılar. Bunun için kullanılacak komut tar r (Veya yalnızca arşivden daha yeni dosyaları eklemek için tar u Komutudur). Yoldaki . Sorun olmamalı.

Ancak bir yakalama var: sıkıştırılmış bir arşive ekleyemezsiniz. Yani yapmanız gerekenler:

gunzip archive.tar.gz
tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt
gzip archive.tar

Muhtemelen duymak istediğiniz şey değildir, çünkü tüm arşivi iki kez yeniden yazmak anlamına gelir. Çok büyük bir arşiv değilse, her şeyin yıldızını kaldırmak ve ardından düzenledikten sonra yeniden katlamak daha iyi olabilir. Alternatif olarak, sıkıştırılmamış bir arşiv kullanabilirsiniz.

48
Jander

Tar başlangıçta kasetler için kullanılacaktı, bu yüzden dosyaları "değiştirmek" gerçekten tasarımda değil. Ancak, dosyayı orijinal katrandan silmek için --delete, sonra da tar'ı güncellemek ve dosyayı yeniden eklemek için -u kullanabilirsiniz. Katranın arşivi dahili olarak yeniden düzenlemesi gerektiğinden biraz zaman alabilir.

9
rleibman