【问题标题】:How to create a tar file without the top directory如何在没有顶层目录的情况下创建 tar 文件
【发布时间】:2015-08-03 01:07:15
【问题描述】:

我正在尝试使用以下命令从目录中 tar 文件:

tar -cvzf archive.tgz -C /tmp/sjohal/okay .

但是我不希望我的 tar 文件包含顶行“./” 如下输出所示:

drwxrwx--- cfes/cfes         0 2015-05-21 12:24:53 ./
-rw-rw---- cfes/cfes         0 2015-05-21 12:24:53 ./file3
-rw-rw---- cfes/cfes         0 2015-05-21 12:24:48 ./file1
-rw-rw---- cfes/cfes         0 2015-05-21 12:24:52 ./file2

如何在没有在 "./" 中添加顶行的情况下 tar 文件?

【问题讨论】:

  • 您只想从目录中 tar 文件而不是目录本身?
  • 我不确定您是否可以避免这种情况。当前目录中的文件将始终位于“./”中。您可以控制的是是否支持完整路径(例如 /tmp/sjohal/okay 与 ./sjohal/okay)。默认情况下,GNU Tar 不会支持完整路径,但会将其转换为相对路径,除非您覆盖它。
  • 我同意大卫的观点,在你的情况下,最好在你的 tar 文件中逐个添加文件,而不给出目录的路径。

标签: bash shell unix command tar


【解决方案1】:

很遗憾,我认为您在使用 -C 时无法做到这一点。 (-C 在我的使用上有一些非常严重的限制。)

我认为你需要改用这样的东西:

(dir=$PWD; shopt -s nullglob; cd /tmp/sjohal/okay && tar -czvf $dir/archive.tgz .[!.]* ..?* *)
  • .[!.]* 匹配具有前导单点的文件,后跟不是点的任何内容。
  • ..?* 匹配具有两个前导点和至少一个其他字符的文件。
  • * 匹配所有普通(非点)文件。

或者,您可以对 tarball 进行后处理,以删除 ./ 条目(如果您只想解决这些问题)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 2021-06-22
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多