我尝试了这个:
DIR=/path/tar/*.gz
if [ "$(ls -A $DIR 2> /dev/null)" == "" ]; then
echo "not gz"
else
tar -zxvf /path/tar/*.gz -C /path/tar
fi
如果文件夹只有一个tar包,那么它可以正常工作。但是如果文件夹中有多个tar包,则会出现错误。
我该怎么做呢?
我想通过循环来解压缩,但是我不知道如何解决这个问题。
for f in *.tar.gz
do
tar zxvf "$f" -C /path/tar
done
我发现find
exec语法非常有用:
find . -name '*.tar.gz' -exec tar -xzvf {} \;
{}
会被找到的每个文件替换,并执行该行。
for a in /path/tar/*.gz
do
tar -xzvf "$a" -C /path/tar
done
.gz
结尾的文件是gzip压缩的tar文件。通常使用.tgz
或.tar.gz
表示,但是如果有问题,tar
将失败。cd /path/tar
更容易,然后可以在解压命令中省略-C /path/tar
和循环中的/path/tar/
。接受的答案对我有用,稍作修改后就可以使用了
for f in *.tar.gz
do
tar zxvf "$f" -C \name_of_destination_folder_inside_current_path
done
我不得不将正斜杠改为反斜杠,然后它就对我起作用了。
--strip-components=NUMBER
命令从文件名中删除 NUMBER 个前导组件。 - Pavan Kumar N