如何使用gunzip命令处理此问题

时间:2013-08-22 13:13:46

标签: shell unix

我在循环中调用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

但这不起作用。

3 个答案:

答案 0 :(得分:2)

通常,gunzip会提取文件并删除.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 :(得分: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

答案 2 :(得分:-1)

试试这个:

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