如何解压缩tar.gz到另一个目录

我有一个档案

* gz

如何在目标目录中解压缩该文件?

305159 次浏览
gzip -dc archive.tar.gz | tar -xf - -C /destination

或者,使用GNU tar

tar xzf archive.tar.gz -C /destination

你可以使用选项-C(或者如果你喜欢长选项--directory)来给出你选择的目标目录,如果你使用的是tar的Gnu版本。目录应该存在:

mkdir foo
tar -xzf bar.tar.gz -C foo

如果你没有使用能够解压缩到特定目录的tar,你可以在调用tar之前简单地cd到你的目标目录;当然,你必须给出你的存档的完整路径。你可以在作用域子shell中这样做,以避免影响周围的脚本:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

或者,如果存档文件的绝对路径和相对路径都不合适,你也可以使用this来在scoping子shell之外命名存档:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz

提取myArchive.tar/ destinationDirectory

命令:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'
你可以使用循环将多个.tar.gz文件解压缩到另一个文件夹。 下面的代码将把/destination/folder/path作为脚本的参数,并解压缩/destination/folder/path中当前位置的所有.tar.gz文件
if [ $# -ne 1 ];
then
echo "invalid argument/s"
echo "Usage: ./script-file-name.sh /target/directory"
exit 0
fi
for file in *.tar.gz
do
tar -zxvf "$file" --directory $1
done

我不确定这是否是RedHat的特定问题,但我必须将-C移到untar命令的前面,以便在untar命令之前执行更改目录。我看到的其他每个例子都在最后有它,对我来说这意味着存档被解压缩到工作目录。在下面的例子:

tar -C /u00/app/oracle/product -xvf /var/tmp/oem-backup.tar.gz u00/app/oracle/product/OEM --strip-components=4