Birden fazla dosyaya bölünmüş veya yayılmış tar arşivi nasıl oluşturulur?


27

Bu sayfaya göre , tar 100 MB'lık dosyalara "split" tar tar arşivini oluşturabilir:

tar -c -M - bant uzunluğu = 102400 - dosya = disk1.tar büyük dosya.tgz

Sorun, bu komutun, ilk dosya doldurulduktan sonra bir sonraki dosya için etkileşimli olarak yeni bir dosya adı vermenizi gerektirmesidir.

Herkes bu etkileşimli adımı atlamanın bir yolunu bilen ve "bölmeyi" otomatik olarak tar yapsın mı?


Yanıtlar:


20

Bilgi --new-volume-scriptisteme mekanizmasını farklı bir mekanizma veya oluşturulan bir dosya adı ile değiştirmenize izin veren seçeneğe bir göz atın . ( (tar.info)Multi-Volume Archivesİçinde tarbilgi sayfasında.) İle soruna splityapmanız gerekenler olmasıdır catçoklu cilt arşiv biraz daha esnek olması gerektiğini, oysa bir şey yapmak tekrar bir araya parçaları.


Tabii ki bu doğru.
Eduardo I.

2
Teşekkürler, aradığım şey buydu! Şimdi burada mevcut bazı talimatlar (örnek dahil) olduğunu öğrendim
Samuel Lampa

Bununla ilgili sorun aşırı derecede saçma olması ve uygun Unix tarzı uygulamaların tam tersini desteklemesidir.
Jan Kyu Peblik

33

Bunun için split kullanabilirsiniz:

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

Bu, tar'ya verileri stdout'a göndermesini ve bölünmesini stdin'den ayırmasını söyler - ek olarak 100M'lik sayısal bir sonek ( -d), -b100M boyutunda bir yığın ( ) kullanarak ve elde edilen dosya adlarının (tardisk00, tardisk01, tardisk02, vb.)

Verileri daha sonra çıkarmak için şunu kullanabilirsiniz:

cat tardisk* | tar xzpvf -

1
Küçük düzeltme, -dsayısal sonek içindir, ön ek değil.
Aralık'ta

8

Elbette kullanılacak en iyi seçenek --new-volume-scriptseçenek.

Ancak, dosyanın boyutunu biliyorsanız (bu durumda, largefile.tgz), bunu da yapabilirsiniz:

tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz

Özet:

-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)

(-L için, tar dosyalarının toplamı largefile.tgz'den büyük olacak şekilde, istediğiniz kadar belirtin)

tarBir dizin ağacı yapısına çalışıyorsanız


1

Aşağıdaki komutlarla çalışmasını sağladım:

mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
    ./split/part_${TAR_VOLUME}.tar' \
    -f split/part_1.tar large_file.tar.gz

Tek sorun, part_1.taraslında son dosya olacak, diğerleri ise bir kişi tarafından değiştiriliyor. Yani part_2.taraslında ilk parçasıdır ve part_k.tarbir (n - 1)inci bölümü. Bunu bir kabuk komut dosyası ile düzeltmek önemsizdir ve okuyucu için bir alıştırma olarak bırakılmıştır.


1

eğer tar büyüklüğünüz daha büyükse, örneğin 1000 {2..1000} gibi sayıları arttırabilir veya girişi teyp uzunluğu argümanına yükseltebilirsiniz.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
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.