Sedangkan tar
dapat menambahkan file ke arsip yang sudah ada, tidak dapat dikompresi. Anda harus bunzip2
arsip terkompresi, meninggalkan tarbal standar. Anda kemudian dapat menggunakan tar
kemampuan untuk menambahkan file ke arsip yang ada, lalu mengompres ulang dengan bzip2
.
Dari manual:
-r Like -c, but new entries are appended to the archive. Note that this only
works on uncompressed archives stored in regular files. The -f option is
required.
Jawaban lainnya benar:Anda tidak dapat memperbarui arsip tar terkompresi dengan benar tanpa membuka kompresinya. Dokumentasi tar GNU mengisyaratkan hal itu, dan upaya 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 dengan solusi pekerjaan kotor yang tidak memerlukan dekompresi, saya dapat menyediakannya, berdasarkan pengamatan berikut:
- Menambahkan aliran bzip2 menggunakan
cat
didukung dan menghasilkan aliran bzip2 yang valid (hal yang sama berlaku untuk gzip); - menambahkan tar menggunakan
cat
tidak menghasilkan file tar yang valid, itulah sebabnya--concatenate
opsi ada, tetapi kita dapat meminta tar untuk berpura-pura valid:
Tampaknya lebih intuitif bagi Anda untuk menginginkan atau mencoba menggunakan cat untuk menggabungkan dua arsip daripada menggunakan
--concatenate
operasi; lagipula, cat adalah utilitas untuk menggabungkan file.Namun, arsip tar memasukkan penanda akhir file yang harus dihapus jika arsip gabungan ingin 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 bukan arsip format tar yang valid. Jika Anda perlu mengambil file dari arsip yang ditambahkan menggunakan utilitas cat, gunakan--ignore-zeros
(-i
) opsi.
Berdasarkan pengetahuan ini, kita dapat melakukan, 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
, itu masih bisa 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 di atas mencantumkan ketiga file dari dua arsip asli, sedangkan -i
dihilangkan (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 pembacaan dan dapat memastikan bahwa -i
akan digunakan saat mencoba membaca dari file yang dibuat dengan cara ini.