Katran dosyaları bir akış biçimi olduğundan - cat
ikisini birlikte oluşturabilir ve neredeyse doğru bir sonuç elde edebilirsiniz - bunu yapmak için onları diske çıkarmanız gerekmez. Dosyaları açabilir (yalnızca), birleştirebilir ve bu akışı yeniden sıkıştırabilirsiniz:
xzcat *.tar.xz | xz -c > combined.tar.xz
combined.tar.xz
bileşen tarball'larındaki tüm dosyaların sadece biraz bozuk olan sıkıştırılmış bir tarball'ı olacaktır. Çıkarmak için --ignore-zeros
seçeneği (GNU'da tar
) kullanmanız gerekir, çünkü arşivlerde sonucun ortasında görünecek bir "dosya sonu" işareti bulunur. Bunun dışında her şey doğru bir şekilde çalışacaktır.
GNU tar
ayrıca --concatenate
birleşik arşivler üretmek için bir modu da destekler . Bu yukarıdaki sınırlamalara sahiptir - --ignore-zeros
ayıklamak için kullanmalısınız - ancak sıkıştırılmış arşivlerle çalışmaz. Süreç ikamesi kullanarak onu kandırmak için bir şeyler inşa edebilirsiniz, ancak bu bir güçlük ve daha da kırılgan.
Farklı tar dosyalarında bir kereden fazla görünen dosyalar varsa, bu düzgün çalışmaz, ancak ne olursa olsun bu sorunla karşılaşırsınız. Aksi takdirde, bu size istediğinizi verecektir - çıktıyı borulamak, çıktısını xz
nasıl tar
sıkıştırır.
Yalnızca belirli bir tar
uygulamayla çalışan arşivler sizin amaçlarınız için yeterli değilse, arşive eklemek r
arkadaşınızdır:
tar cJf combined.tar.xz dummy-file
for x in db-*.tar.xz
do
mkdir tmp
pushd tmp
tar xJf "../$x"
tar rJf ../combined.tar.xz .
popd
rm -r tmp
done
Bu, her seferinde yalnızca bir arşiv çıkarır, bu nedenle çalışma alanı tek bir arşivin içeriğiyle sınırlıdır. Sıkıştırma, son arşivi bir kerede yapmış olmanız gibi akıyor, bu yüzden olabildiğince iyi olacak. Bunu cat
sürümlerden daha yavaş yapacak çok fazla açma ve yeniden sıkıştırma yapıyorsunuz , ancak ortaya çıkan arşiv herhangi bir özel destek olmadan her yerde çalışacak.
Tam olarak ne istediğinize bağlı olarak, yalnızca sıkıştırılmamış tar dosyalarını bir arşive eklemenin yeterli olabileceğini unutmayın. İçeriklerinin yanı sıra içeriklerini de tam olarak sıkıştırır (neredeyse) ve her dosya için sıkıştırma yükünü azaltır. Bu şuna benzer:
tar cJf combined.tar.xz dummy-file
for x in db-*.tar.xz
do
xz -dk "$x"
tar rJf combined.tar.xz "${x%.xz}"
rm -f "${x%.xz}"
done
Akışta fazladan katran başlıkları olduğu için bu, son sıkıştırılmış boyut açısından biraz daha az verimlidir, ancak tüm dosyaları ayıklamak ve yeniden dosya olarak eklemek için biraz zaman kazandırır. Sonunda combined.tar.xz
çok sayıda (sıkıştırılmamış) db-*.tar
dosya içerir.