【问题标题】:How to create tar file which contains only file如何创建仅包含文件的 tar 文件
【发布时间】:2022-01-06 06:57:24
【问题描述】:

我在 /tmp/a.crt 中有一个文件,我必须制作包含 a.crt 而不是 tmp/a.crt 的 a.tgz。当我通过 java 运行 tar 命令时,我无法导航到 /tmp 并执行 tar -cvf a.tgz a.crt 如果我运行tar -cvf a.tgz /tmp/a.crt,它会创建一个包含 tmp/a.crt 的 a.tgz。

我试过tar --exclude='/tmp' -cvf a.tgz /tmp/a.crt,但在解压时显示

gzip:标准输入:不是 gzip 格式

tar:子返回状态 1

有什么办法可以达到我的要求。

【问题讨论】:

  • 只需使用-C。考虑使用 Java 压缩库来使您的应用程序具有可移植性。
  • @BoristheSpider 不明白确切的命令应该是什么,请您详细说明一下。我们可以先手动检查 linux promot,然后再从 java 中复制我可以复制的同一行 -- String[] command = new String[] { "/bin/bash", "-c", "/usr/bin/tar -cvf " + "a.tgz" + " " + "/tmp/a.crt" }; CommandResponse cmdResponse = cmdRunner.runCommandWithConsoleOutput(command);

标签: java linux unix tar


【解决方案1】:

如果要创建压缩的 tar 文件(.tgz.tar.gz),则必须使用 option z。否则,您只有一个未压缩的 tar 文件 (.tar)。您可能在创建过程中省略了此选项。

【讨论】:

  • 感谢 ceving 我会用这个
【解决方案2】:

这是一个展示你想要什么的 Bash 会话(据我了解):

# first, create test files
$ mkdir tmp
$ touch tmp/a.crt
$ find .
.
./tmp
./tmp/a.crt

# use "-C" to keep the filename out of the archive
$ tar -C tmp -czvf a.tgz a.crt
a.crt

# confirm results
$ tar tf a.tgz 
a.crt

如您所见,在最终的a.tgz 文件中,不存在tmp/ 目录。

这通常是个坏主意,会制造有时被称为“焦油炸弹”的东西 (link)。但大概你有一个很好的理由(:

【讨论】:

  • 非常感谢,它对我有用
猜你喜欢
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多