解压 tarball 时创建目标目录

wul*_*pro 43 tar directory

是否可以创建一个类似于 的目标目录,mkdir -p我可以在我的 tar 命令中定义一个不存在的目标目录,并且 tar 将为我创建该目录?

我知道我可以使用 将输出重定向到一个目录tar -C /target/dir,但是如果目标目录不存在,这将不起作用。

小智 55

mkdir -p /target/dir && tar -C /target/dir
Run Code Online (Sandbox Code Playgroud)

  • 较小的建议更改:`mkdir -p /target/dir && tar -C $_` (21认同)
  • @Suhayb `$_` 是 Bash 中的一个特殊参数,它扩展到上一个命令的最后一个参数。 (6认同)
  • 没有勺子喂养,直截了当。 (4认同)
  • @MarkMelville 向我们描述 $_ 在这里应该做什么 (4认同)

小智 35

tar -xvf bash.html_node.tar.gz --one-top-level
Run Code Online (Sandbox Code Playgroud)

从 tar 命令的手册页

--one-top-level[=DIR]

    将所有文件提取到DIR 中,或者,如果不带参数使用,则提取到以存档的基本名称命名的子目录中(减去可识别的标准压缩后缀--auto-compress)。

- - - 测试

测试 1

tar zxvf ../aaa.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree aaa
aaa/
??? 111
??? 222
Run Code Online (Sandbox Code Playgroud)

// 如果 tgz 名称与存档的 root_dir 相同,则没有其他影响

测试 2

mv ../aaa.tgz ../bbb.tgz

tar zxvf ../bbb.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree bbb
bbb
??? aaa
    ??? 111
    ??? 222
Run Code Online (Sandbox Code Playgroud)

// 如果 tgz 名称与存档的 root_dir 不同,则创建一个顶级目录

  • 需要 GNU tar 吗?Mac 默认的 bsd tar 没有这个选项。 (9认同)
  • 是的,应该更清楚地提及这一点。 (4认同)
  • GNU Tar 1.26 没有`--one-top-level` 选项,它出现了。 (4认同)

小智 6

这对我来说更有意义: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdir虽然我不太了解-p开关,但制作文件夹。&&让您执行第二个命令。我使用了典型的 tar 开关,但最后-C用于更改目录并提取到所需的位置。

参考:extract-files-contained-in-archive-tar-gz-to-new-directory-named-archive

  • 如果目录已经存在,-p 开关不会抛出错误。 (3认同)
  • @David 它还将创建任何领先的不存在的目录,即如果它不存在,它将创建`/create`。 (3认同)