如何在另一个目录中解压tar.gz文件

297

我有一个存档文件

*.tar.gz

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


9
为什么会有这么多踩?除了 -C 选项以外还有其他选项(也许他使用的版本没有提供这个选项)。 - Alfe
2
Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。 - jww
1
@jww 虽然我理解你的观点,但是在 这个 论坛中我们也有名为 targz 的标签。将一个 tarball 提取到特定目录中可能是 shell 脚本的一部分,因此也可以是编程的一部分。我想这种问题可以在任何一个论坛中问。 - Alfe
5个回答

355
您可以使用选项-C(或如果您更喜欢长格式选项,可以使用--directory)来指定目标目录,以防您使用Gnu版本的tar。该目录应该存在:
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

或者,如果绝对路径和相对路径都不适合于归档文件,则可以使用此方法在子shell范围之外命名归档文件:

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

118
gzip -dc archive.tar.gz | tar -xf - -C /destination

或者,使用GNU tar

tar xzf archive.tar.gz -C /destination

3
如果tar无法理解压缩的档案,我喜欢使用gzip的概念。 - Alfe

4

myArchive.tar解压到/destinationDirectory

命令:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'

1

我不确定这是否是一个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

0
你可以使用for循环将多个.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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接