2013-08-22 44 views
0

我在基於文件中文件名列表的循環中調用gunzip命令。我希望它能解壓縮文件並生成一個文件名列表。如何用gunzip命令處理這個

我已經試過

for i in `cat $file_name` 
    do 
    gunzip $i>>temp.txt 
done 

for i in `cat $file_name` 
    do 
    echo `gunzip $i`>>temp.txt 
done 

,但是這是行不通的。

+0

不知道我明白了,但是你是否希望'爲我在\'cat $ file_name \';做gunzip $ i >> temp.txt;完成'?請注意反引號和分號。 – Chris

+3

我喜歡'走了'。也許用'done'代替。 – 2013-08-22 13:20:08

+0

嗨克里斯你知道gunzip命令解壓縮文件,我想所有標記文件的名稱存儲在文本文件中,謝謝 –

回答

2

通常gunzip解將extarct的文件並刪除.gz擴展

for i in `cat $file_name` 
do 
gunzip $i 
echo $i|sed -e 's/\.gz//g' -e 's/\.tgz/.tar/g' >>temp.txt 
done 
+1

我更喜歡echo $ {i%.gz} –

+1

當gunzip將'foo.tgz'轉換爲'foo.tar'時,這並不能解決這個問題。另外''gunzip'可以在用'-N'標誌調用時恢復到原始文件名(可能與存檔名稱無關)(雖然OP沒有詢問) –

+0

已更新爲tgz – Vijay

0

有許多辦法來解決你的問題。

你可以試試這個,也許不是最好的一個:

OUTPUT_TEMP_TXT="temp.txt" 

    for GFILE in $(cat $file_name) 
    do 
     # Because there is only 1 file in a GZIP archive 
     FILENAME=$(gunzip -v $GFILE 2>&1) 
     RCODE=$? 
     if [[ RCODE -eq 0 ]] 
     then 
      echo ${FILENAME} | cut -d':' -f1 | sed -e 's/\.gz$//gi' -e 's/\.tgz$/\.tar/gi' >> ${OUTPUT_TEMP_TXT} 
     else 
      echo "Can't extract $GFILE" >> ${OUTPUT_TEMP_TXT} 
     fi 
    done 
-1

試試這個:

cat list.txt | tee >(rev | cut -d'.' -f2- | rev > list.out) | xargs gunzip 

修邊.gzAWK

cat list.txt | tee >(awk -F '.' '{$NF="";print}' > list.out) | xargs gunzip 

sed

cat list.txt | tee >(sed 's/\.gz$//' > list.out) | xargs gunzip 
+0

我想你不會使用「-c」選項,因爲: -c, - 在標準輸出上寫標準輸出,保持原始文件不變 –

+0

好的,我誤解了這個問題,我的解決方案是解壓文件並將其內容添加到另一個文件中。 – rook