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


270

我有一个档案

* .tar.gz

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


9
为什么所有的反对票?除了-C以外,还有更多选项(也许他的版本不提供此选项)。
Alfe 2013年

2
堆栈溢出是一个用于编程和开发问题的站点。这个问题似乎与主题无关,因为它与编程或开发无关。请在帮助中心中查看我可以询问哪些主题。也许超级用户Unix&Linux Stack Exchange是更好的选择。
jww

@jww虽然我明白你的意思我们也有标签命名tar,并gz围绕这个论坛。将tarball提取到特定目录很可能是Shell脚本的一部分,因此也是编程的一部分。我想可以在任何一个论坛中都问这种问题。
Alfe

Answers:


319

如果您使用的Gnu版本,则可以使用该选项-C(或者,--directory如果您希望使用长选项)来选择目标目录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

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

或者,使用GNU tar

tar xzf archive.tar.gz -C /destination

3
我喜欢使用gziptar不能理解压缩档案的情况。
阿尔夫,

4

myArchive.tar提取到/ destinationDirectory

命令:

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

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.