我在基於文件中文件名列表的循環中調用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
,但是這是行不通的。
我在基於文件中文件名列表的循環中調用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
,但是這是行不通的。
通常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
我更喜歡echo $ {i%.gz} –
當gunzip將'foo.tgz'轉換爲'foo.tar'時,這並不能解決這個問題。另外''gunzip'可以在用'-N'標誌調用時恢復到原始文件名(可能與存檔名稱無關)(雖然OP沒有詢問) –
已更新爲tgz – Vijay
有許多辦法來解決你的問題。
你可以試試這個,也許不是最好的一個:
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
試試這個:
cat list.txt | tee >(rev | cut -d'.' -f2- | rev > list.out) | xargs gunzip
修邊.gz
與AWK
:
cat list.txt | tee >(awk -F '.' '{$NF="";print}' > list.out) | xargs gunzip
與sed
:
cat list.txt | tee >(sed 's/\.gz$//' > list.out) | xargs gunzip
我想你不會使用「-c」選項,因爲: -c, - 在標準輸出上寫標準輸出,保持原始文件不變 –
好的,我誤解了這個問題,我的解決方案是解壓文件並將其內容添加到另一個文件中。 – rook
不知道我明白了,但是你是否希望'爲我在\'cat $ file_name \';做gunzip $ i >> temp.txt;完成'?請注意反引號和分號。 – Chris
我喜歡'走了'。也許用'done'代替。 – 2013-08-22 13:20:08
嗨克里斯你知道gunzip命令解壓縮文件,我想所有標記文件的名稱存儲在文本文件中,謝謝 –