我對 bash 有以下(簡化的)情況:
進來的資料流是 gzip 壓縮的。然而,有時資料會意外地被雙重 gzip 壓縮,所以我接下來要做的就是...incoming stream... | gunzip | gunzip | ...continue process.... 但只有當我確定第一個 gunzip 的輸出是另一個 gzipped 資料流時。
我最初的想法是:
echo "My plain text" | gzip | gzip | gunzip | if [ $(mimetype -b --stdin ) == 'application/gzip' ]; then zcat; else cat; fi
但這會導致第二個 gunzip ( gzip: stdin: unexpected end of file) 的標準輸入為空。我的懷疑是流只能被讀取一次,mimetype并且已經完成了它,因此導致 zcat 的輸入為空。
可以通過以下方式檢查腳本的作業:
echo "My plain text" | gzip | gzip | gunzip | if [ 'application/gzip' == 'text/plain' ]; then cat; else zcat; fi
運行良好。
我想知道的:
- 您只能處理一次流的假設是否正確?
- 如果不在兩者之間將資料保存到硬碟,有什么方法可以前進?
uj5u.com熱心網友回復:
使用zless而不是zcat. 如果它的輸入沒有被壓縮,它會原封不動地通過它(這允許您使用zless壓縮和未壓縮檔案的混合運行一次)。它通常是一個互動式實用程式,但如果輸出不是終端,它只是一個過濾器。
echo "My plain text" | gzip | gzip | zless | zless
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414659.html
標籤:
上一篇:linux比較兩個變數
