Jawaban lainnya benar: Anda tidak dapat memperbarui arsip tar terkompresi dengan benar tanpa mengompresnya. Dokumentasi tar GNU mengisyaratkan hal itu, dan berusaha memperbarui gagal dengan pesan kesalahan eksplisit:
$ tar --concatenate --file=cat.tar.bz2 two.tar.bz2
tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now
Namun, jika Anda tertarik pada solusi semacam pekerjaan kotor yang tidak memerlukan dekompresi, saya dapat memberikannya, berdasarkan pengamatan berikut:
- Menambahkan penggunaan stream bzip2
cat
didukung dan menghasilkan stream bzip2 yang valid (hal yang sama berlaku untuk gzip);
- menambahkan ter menggunakan
cat
tidak menghasilkan file tar yang valid, itulah sebabnya --concatenate
pilihan ada, tetapi kita dapat meminta tar untuk berpura-pura valid:
Mungkin tampak lebih intuitif bagi Anda untuk menginginkan atau mencoba menggunakan kucing untuk menyatukan dua arsip daripada menggunakan --concatenate
operasi; lagipula, cat adalah utilitas untuk menggabungkan file.
Namun, arsip tar menggabungkan penanda akhir file yang harus dihapus jika arsip gabungan harus dibaca dengan benar sebagai satu arsip. --concatenate
menghapus penanda akhir arsip dari arsip target sebelum setiap arsip baru ditambahkan. Jika Anda menggunakan cat untuk menggabungkan arsip, hasilnya tidak akan menjadi arsip format tar yang valid. Jika Anda perlu mengambil file dari arsip yang ditambahkan untuk menggunakan utilitas cat, gunakan opsi --ignore-zeros
( -i
).
Berdasarkan pengetahuan ini, bisa kita lakukan, misalnya:
cat {one,two}.tar.bz2 >combined.tar.bz2
Hasil ini, seperti yang dijelaskan oleh cuplikan dokumentasi di atas, dalam file tar yang tidak valid, tetapi menggunakan --ignore-zeros
, masih dapat dibaca sepenuhnya:
## Show contents of `one.tar.bz2'
$ tar tf one.tar.bz2
a
b
## Show contents of `two.tar.bz2'
$ tar tf two.tar.bz2
c
## Show contents of `combined.tar.bz2', bypassing the bad format
$ tar tif combined.tar.bz2
a
b
c
Perhatikan bagaimana hal di atas mencantumkan ketiga file dari dua arsip asli, sedangkan mengabaikan -i
(dengan benar) hanya mencantumkan file dari arsip asli pertama:
$ tar tf combined.tar.bz2
a
b
Sekali lagi, itu tidak lebih dari trik kotor, tetapi bisa berguna jika Anda mengontrol sisi penulisan dan membaca dan dapat memastikan bahwa itu -i
akan digunakan ketika mencoba membaca dari file yang dibuat dengan cara ini.