从tar文件提取到Bash中的其他目录

时间:2018-08-01 14:10:37

标签: bash unix tar

我是Bash的新手,正在尝试解压缩tarball。到目前为止的代码:

#!/bin/bash
tar="/cdrom/java/jre1-8u181-x64tar.gz"

# Unpack tarball
gunzip < $tar | tar xf -

这会将归档文件提取到当前目录中。如何指定位置?

使用Solaris 10,Bash 3.2.51

4 个答案:

答案 0 :(得分:3)

要将文件提取到特定目录

gunzip < $tar | tar -xf - --directory /path/to/extract/to

gunzip < $tar | tar -xf - -C /path/to/extract/to

答案 1 :(得分:3)

这在包括Solaris在内的所有地方都很好用,并且由于您仅在子shell中更改目录,因此不会影响您在当前会话中的位置:

gunzip < $tar | ( cd /some/where/else && tar xf -)

答案 2 :(得分:0)

tar的-xf部分意味着提取到“ f”文件中。尝试将tar命令更改为类似

修改

...| tar -xf - -C /path/to/your/desired/result/folder

对不起,@ pitseeker是正确的。 -C选项告诉tar更改目录然后执行提取

答案 3 :(得分:0)

在编写命令时,命令正在当前目录中解压缩:

gunzip < $tar | tar xf -

添加“ -C”选项以为其提供备用目标目录:

gunzip < $tar | tar xf - -C /another/target/directory

请注意,Solaris tar无法理解--directory选项。
参见Solaris tar manpage

为了完整起见,如果您拥有Gnu-Tar(它也可用于Solaris),则可以使用以下更简单的命令(可以一次性解压缩和解压缩):

tar xzf $tar -C /another/target/directory

附带说明:
许多人在tar命令参数中使用前导破折号。那是多余的。
如果您有兴趣,请查看答案to this question