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!
linux
compression
tar
james
sumber
sumber
tar
tidak tahu tipe data apa yang dimilikinyastdin
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()
/ sederhanaexec()
untuk menyalurkan data melalui utilitas yang tidak dikompres. Utilitas akan membaca daristdin
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.)Jawaban:
Ini bukan jawaban yang ingin Anda dengar, tetapi ini tidak didukung oleh GNU tar menurut manualnya:
- 8.1.1 Membuat dan Membaca Arsip Terkompresi
sumber
Akhirnya, saya menyadari alasan saya tidak bisa membiarkan tar mendeteksi dan mendekompresi arsip dari stdin adalah karena saya menggunakan GNU tar. Tar BSD dapat melakukannya secara otomatis tanpa masalah. Jadi saya memutuskan untuk menggunakan bsdtar bukan tar dalam skrip saya sekarang.
sumber