我在这样的目录中有几个文件:
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文件?
答案 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
。