如何设置tar,gz和tar.gz文件的大小写?

时间:2016-09-22 13:06:09

标签: bash gzip tar

我在这样的目录中有几个文件:

xxx.tar.gz
xxx.tar
yyy.tar.gz
yyy.tar
zzz.txt.gz
...
...

我有list.txt这样的文件:

LIST.TXT:

/home/phe/xxx.tar.gz
/home/phe/xxx.tar
/home/phe/yyy.tar.gz
/home/phe/yyy.tar
/home/phe/zzz.txt.gz
...
...

我需要像这样提取这些文件:

for file in (cat list.txt); do
   tar zxvf $file
done

如何在同一命令中打开tar.gz,txt.gz和tar文件?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

while IFS= read -r file; do
    file="${file##*/}" # remove the directory
    case $file in
        *.tar.gz)
            tar xzvf "$file"
            ;;
        *.txt.gz)
            gzip -d "$file"
            ;;
    esac
done < list.txt

请注意,对于tar命令,我怀疑您需要使用-C指定一些输出目录,否则将在当前目录中提取所有内容。

答案 1 :(得分:3)

如果我正确地阅读你的问题并且.txt.gz文件只是gzip压缩,.tar.gz文件是tarball,而.tar文件只是tar档案,没有压缩,那么你可以做类似以下的事情:

while read -r file; do 
    tmp = "${file##*/}"
    [ "${tmp:3:3}" = "txt" ] && gzip -dk "$file"  ## remove k to delete original
    [ "${tmp##.}" = "tar" ] && tar -xvf "$file"
    [ "${tmp##.}" = "gz" ] && tar -xvzf "$file"
done <list.txt

如果文件不再位于原始目录中(如list.txt文件中所示),请将tmp更改为上面的file