Saya mencari cara untuk memperbarui ribuan file arsip .tbz, jadi saya akan melakukan ini dengan skrip shell. Saya perlu menambahkan satu file ke masing-masing.
Pertanyaan saya adalah, adakah cara yang lebih cepat untuk melakukan ini tanpa mengekstraksi setiap konten tbz, lalu mengompres ulang dengan file baru yang termasuk dalam tar yang terkandung? Seperti apa bentuk perintahnya?
Terima kasih
linux
shell-script
shell
command-line
tar
BotolZero
sumber
sumber
Jawaban:
Meskipun
tar
dapat menambahkan file ke arsip yang sudah ada, itu tidak dapat dikompresi. Anda harusbunzip2
mengarsipkan arsip, meninggalkan tarball standar. Anda kemudian dapat menggunakantar
kemampuan untuk menambahkan file ke arsip yang ada, dan kemudian mengkompres ulang denganbzip2
.Dari manual:
sumber
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:
Namun, jika Anda tertarik pada solusi semacam pekerjaan kotor yang tidak memerlukan dekompresi, saya dapat memberikannya, berdasarkan pengamatan berikut:
cat
didukung dan menghasilkan stream bzip2 yang valid (hal yang sama berlaku untuk gzip);cat
tidak menghasilkan file tar yang valid, itulah sebabnya--concatenate
pilihan ada, tetapi kita dapat meminta tar untuk berpura-pura valid:Berdasarkan pengetahuan ini, bisa kita lakukan, misalnya:
Hasil ini, seperti yang dijelaskan oleh cuplikan dokumentasi di atas, dalam file tar yang tidak valid, tetapi menggunakan
--ignore-zeros
, masih dapat dibaca sepenuhnya:Perhatikan bagaimana hal di atas mencantumkan ketiga file dari dua arsip asli, sedangkan mengabaikan
-i
(dengan benar) hanya mencantumkan file dari arsip asli pertama: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.sumber
i
ke baris perintah akan melihat semuanya.