如何使用gunzip 和tar 将tar.gz 文件解压到我想要的特定目录?

如何使用gunzip 和tar 将tar.gz 文件解压到我想要的特定目录?

gunzip -dc /path_to_tar.gz_file/zip1.tar.gz | tar xf -当我在文件所在的目录中运行时tar.gz,它提取得很好。

我如何告诉它将文件内容放入tar.gz特定目录?

我尝试了这个gunzip -dc /path_to_tar.gz_file/zip1.tar.gz | tar xf /target_directory但出现tar错误。

我还应该在这里指出,我正在尝试在 bash 脚本中执行此操作,并且我正在运行 Solaris 10。

答案1

您可以执行一个tar命令来将内容提取到您想要的位置:

tar -zxvf path_to_file -C output_directory

正如中所解释的tar 联机帮助页:

-C 目录、--cd 目录、--directory 目录

在 c 和 r 模式下,这会在添加以下文件之前更改目录。在 x 模式下,在打开存档之后但从存档中提取条目之前更改目录。


正如您所补充的,您正在使用索拉里斯,我想你可以尝试:

gunzip -dc path_to_file | tar xf - -C path_to_extract

答案2

这是你想要的吗?

tar xzvf file.tar.gz -C /target/directory

答案3

在现代 Linux 上你可以使用:

tar xzf /path/to/file.tar.gz -C /target/directory/

这几乎相当于:

(cd /target/directory/; gzip -cd /path/to/file.tar.gz|tar xf - )

如果您使用的不是 Linux,请检查您的手册页以了解您的工具支持的选项。

答案4

这里的其他答案都没有提到tarSolaris 中默认实现的所有注意事项。其中一个警告是它本身不支持压缩。简单提取可以通过以下方式实现:

gzip -dc < /path/to/the.tar.gz | tar xvf -

此外,如果您通过类似的方式创建了存档

tar cvf - /path/to/directory | gzip -c > the.tar.gz

您会发现提取此存档总是会覆盖原始文件。这是因为 Solaris在提取时tar不会/从归档条目中删除前导部分,也无法删除路径组件。所以如果你想能够提取一个第二内容的副本,您将必须使用稍微不同的命令创建存档:

tar cvf - -C /path/to/directory . | gzip -c > the.tar.gz

或者

(cd /path/to/directory && tar cvf - .) | gzip -c > the.tar.gz

在 Solaris 实现中,该-C开关不适用于提取。假设存档是使用这两种方法之一或类似方法创建的,第二种形式的变体将允许提取到任意位置:

gzip -dc < the.tar.gz | (cd /path/to/extraction/point && tar xvf -)

如果您tar安装了 GNU ( /usr/sfw/bin/gtar),它支持直接压缩以及路径剥离。在这种情况下,通常的选项如

/usr/sfw/bin/gtar xvzf the.tar.gz

就足够了。

相关内容