如何为 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
。
我在这样的目录中只有几个文件:
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
。