36

我想使用 shell 命令解压缩档案,例如“tar123.tar.gz”到目录 /myunzip/tar123/”。

tar -xf tar123.tar.gz 将解压缩文件,但在与我工作的目录相同的目录中。

如果文件名是“tar233.tar.gz”,我希望将其解压缩到 /myunzip/tar233.tar.gz”,因此目标目录将基于文件名。

有谁知道 tar 命令是否可以做到这一点?

4

4 回答 4

37
tar -xzvf filename.tar.gz -C destination_directory
于 2010-06-01T14:27:26.540 回答
36

使用 Bash 和 GNU 焦油:

file=tar123.tar.gz
dir=/myunzip/${file%.tar.gz}
mkdir -p $dir
tar -C $dir -xzf $file
于 2010-06-01T14:23:44.280 回答
4

您可以在使用标志提取之前更改目录-C,但该目录必须已经存在。(如果您创建特定于文件的目录,我强烈建议不要调用它们foo.tar.gz- 扩展名意味着它是一个存档文件,但它实际上是一个目录。这导致混淆。)

于 2010-06-01T14:21:50.313 回答
2

尝试

file=tar123.tar.gz
dir=/myunzip/$(basename $file .tar.gz)   # matter of taste and custom here
[ -d "$dir" ] && { echo "$dir already exists" >&2; exit 1; }
mkdir "$dir" && ( gzip -d "$file | ( cd "$dir" && tar xf - ) )

如果您使用的是 GNU tar,您还可以给它一个选项-C "$dir",这将导致它在解压缩之前更改为目录。但是上面的代码即使使用青铜时代的 tar 也应该可以工作。

免责声明:以上代码均未经过测试。

于 2010-06-01T14:22:28.883 回答