如何为 tar、gz 和 tar.gz 文件设置大小写?

How do I set case for tar, gz and tar.gz files?

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

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 文件?

你可以这样做:

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 指定一些输出目录,否则所有内容都将提取到当前目录中。

如果我没看错你的问题,.txt.gz 文件只是 gzip 压缩,.tar.gz 文件是 tar 球,.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