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

Posted

技术标签:

【中文标题】如何解压缩另一个目录中的 tar.gz【英文标题】:How to uncompress a tar.gz in another directory 【发布时间】:2013-08-26 11:30:22 【问题描述】:

我有一个存档

*.tar.gz

如何在目标目录中解压缩?

【问题讨论】:

为什么所有的反对票?除了 -C 之外,还有更多的选项(也许他的版本没有提供这个)。 Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地点。 @jww 虽然我明白你的意思,但我们在 this 论坛中也有名为 targz 的标签。将 tarball 解压缩到特定目录很可能是 shell 脚本的一部分,因此也是编程的一部分。我想这种问题可以在任何一个论坛中提出。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:
gzip -dc archive.tar.gz | tar -xf - -C /destination

或者,使用 GNU tar

tar xzf archive.tar.gz -C /destination

【讨论】:

我喜欢使用 gzip 以防 tar 不理解压缩档案。【参考方案3】:

myArchive.tar 提取到 /destinationDirectory

命令:

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

【讨论】:

【参考方案4】:

您可以使用 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

【讨论】:

【参考方案5】:

我不确定这是否是特定于 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

【讨论】:

以上是关于如何解压缩另一个目录中的 tar.gz的主要内容,如果未能解决你的问题,请参考以下文章

如何在水壶中解压缩和导入 .tar.gz 文件?

Linux下*.tar.gz文件解压缩命令

Linux下*.tar.gz文件解压缩命令

linux tar压缩解压缩文件夹、文件命令详解

linux中解压缩并安装.tar.gz后缀的文件

linux 压缩与解压缩