Saya menggunakan tar GNU. Itu dapat secara otomatis mendeteksi tipe kompresi ketika mengompresi / mendekompresi file. Tapi saya perlu mendekompres arsip dari stdin dan tipe kompres tidak diketahui. Saya perhatikan bahwa tar dapat memberi saya saran yang benar seperti:
tar: Archive is compressed. Use -z option
Tapi saya ingin tar menggunakan opsi kompresi itu secara otomatis tanpa meminta saya untuk memasukkan argumen itu. Bagaimana saya bisa melakukan itu? Kenapa tidak tar dekompresi saja karena sudah tahu tipe kompresi?
Terima kasih!
tar
tidak tahu tipe data apa yang dimilikinya stdin
sampai setelah membacanya, dan saat itu sudah terlambat untuk memanggil program uncompress. Ini mendukung gzip, bzip2, dan lainnya. Mengatasi masalah ini tidak mudah (harus buffer data), jadi itu hanya memberitahu Anda untuk mencoba lagi.
fork()
/ sederhana exec()
untuk menyalurkan data melalui utilitas yang tidak dikompres. Utilitas akan membaca dari stdin
pipa dan 4K pertama sekarang akan hilang. Tidak ada cara untuk mengembalikan data ke dalam pipa setelah membacanya.
cat buffer - | gunzip
. (Atau, I / O non-blocking dapat digunakan untuk menghindari kebutuhan akan proses tambahan.)