Saya memiliki pekerjaan pada sistem batch yang berjalan sangat lama dan menghasilkan banyak output. Sebenarnya saya harus mem-pipe output standar melalui gzip untuk menjaga agar batch batch tidak mengisi area kerjanya dan kemudian crash.
longscript | gzip -9 > log.gz
Sekarang, saya ingin menyelidiki output dari pekerjaan saat ini masih berjalan. Jadi saya melakukan ini:
gunzip log.gz
Ini berjalan sangat lama, karena ini adalah file besar (beberapa GB). Saya bisa melihat file output sedang dibuat saat sedang berjalan dan bisa melihatnya saat sedang dibangun.
tail log
> some-line-of-the-log-file
tail log
> some-other-line-of-the-log-file
Namun, pada akhirnya, gzip menemukan akhir file gzip. Karena pekerjaan masih berjalan dan gzip masih menulis file, belum ada footer yang tepat, jadi ini terjadi:
gzip: log.gz: unexpected end of file
Setelah ini, file log yang diekstraksi dihapus, karena gzip berpikir bahwa data yang diekstrak yang rusak tidak ada gunanya bagiku. Saya, bagaimanapun, tidak setuju - bahkan jika beberapa baris terakhir diacak, hasilnya masih sangat menarik bagi saya.
Bagaimana saya bisa meyakinkan gzip untuk membiarkan saya menyimpan file "rusak"?
gunzip -c
menulis output ke stdout ... mungkin itu yang Anda cari? Itu membuat aslinya tidak berubah.Jawaban:
Terlepas dari bagian paling akhir file, Anda akan dapat melihat data yang tidak terkompresi dengan
zcat
(ataugzip -dc
, ataugunzip -c
):atau
atau
gzip
akan melakukan buffering untuk alasan yang jelas (perlu mengompres data dalam potongan), jadi meskipun program mungkin telah mengeluarkan beberapa data, data tersebut mungkin belum ada dalamlog.gz
file.Anda juga dapat menyimpan log yang tidak dikompresi
... tapi itu akan konyol karena jelas ada alasan mengapa Anda memampatkan output di tempat pertama.
sumber
gunzip < log.gz
alih-alihzcat log.gz
untuk sistem yangzcat
hanya berfungsi dalam.Z
file.Jika saya mengerti dengan benar, Anda ingin melakukan sesuatu seperti
tail -f
dengan file gzip yang masih tumbuh: Saya telah mengembangkan gztool yang dapat melakukan itu (antara lain):dan itu akan ditampilkan ke konsol terus menerus, menunggu data baru ketika diperlukan.
Catatan yang
gztool
juga akan membuat file indeks (log.gzi
dalam hal ini) yang akan membuat ekor masa depan atau akses acak lainnya ke data gzip dengangztool
hampir seketika. Jika Anda tidak ingin membuat indeks (meskipun ukurannya 0,3% / gzip dan tidak menambah waktu pemrosesan), Anda dapat menggunakannya-W
untuk tidak membuatnya.sumber
Anda dapat mencoba untuk membagi file dan gzip masing-masing: https://stackoverflow.com/a/2016918/3090950
Lagi pula, bisakah Anda menjalankan perintah dalam mode verbose? Ini akan memberi Anda informasi lebih lanjut.
sumber