289

我有一个存档

*.tar.gz

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

4

5 回答 5

342

-C如果您--directory使用的是 Gnu 版本的tar. 该目录应该存在:

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

如果您没有使用tar能够提取到特定目录的功能,您可以cd在调用之前简单地进入您的目标目录tar;那么你当然必须给出你的档案的完整路径。您可以在作用域子外壳中执行此操作以避免影响周围的脚本:

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

或者,如果存档文件的绝对路径和相对路径都不合适,您也可以使用它在作用域子外壳之外命名存档:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz
于 2013-08-23T12:19:33.557 回答
114
gzip -dc archive.tar.gz | tar -xf - -C /destination

或者,使用 GNU 焦油

tar xzf archive.tar.gz -C /destination
于 2013-08-23T12:18:35.307 回答
4

将 myArchive.tar提取到/destinationDirectory

命令:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'
于 2015-06-30T18:54:23.760 回答
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
于 2020-04-14T09:54:56.080 回答
0

我不确定这是否是 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
于 2021-09-16T08:48:53.760 回答