2013-10-31 70 views
1

everyone。 我需要編寫一個腳本這需要一個參數test.xxx從標準就像這樣:如何在shell腳本中對從標準輸入(stdin)讀取的壓縮文件進行解壓縮

./script < test.xxx 

test.xxx由gzip命令壓縮,我想用gunzip和pax擴展歸檔到一個目錄。劇本是這樣的:

#!/bin/sh 
while read line; do    #here try to catch input file 
    echo $line >> /tmp/tmpfile 
done 
gunzip < /tmp/tmpfile | pax -r /tmp 
... 

這種閱讀形式似乎只對常規文件,而不是壓縮文件的工作,我不知道如何存儲從標準輸入讀取,從而壓縮文件 - >

我可以執行「gunzip </tmp/tmpfile | pax -r/tmp」並將文件展開到/ tmp。

回答

3

只要撥打zcat,這將從標準輸入un-gzip。

#!/bin/sh 
zcat | pax -r /tmp 
... 
+0

謝謝你!它的工作原理〜 – Alex

+0

但是,如果我寫「compress_script /tmp/output」,compress_script將從stdin獲取文件並輸出到stdout。 shell會拋出「zcat:未知壓縮格式」。你知道如何解決它嗎? – Alex

+0

關於這個錯誤:你確定你的文件是一個gzip壓縮文件嗎?或者它是純文本? (如果是純文本,'zcat'會窒息。)或者它完全是其他類型的文件? ('file'命令可以幫助你 - 運行'man file'獲取更多信息。)或者文件損壞了? (在你的原始腳本中,你正在使用shell'read'內建的「逐行」讀取一個像文本文件一樣的二進制壓縮文件 - 一個主要的no-no!) – pobrelkey