如何在没有顶层目录的情况下创建 tar 文件

Posted

技术标签:

【中文标题】如何在没有顶层目录的情况下创建 tar 文件【英文标题】:How to create a tar file without the top directory 【发布时间】: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 文件中逐个添加文件,而不给出目录的路径。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于如何在没有顶层目录的情况下创建 tar 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有一些文件夹的情况下创建 tar 存档?

如何在没有父目录的情况下对目录进行 tar [关闭]

如何在没有目录结构的情况下使用 tar 归档来自不同目录的文件

如何只查看tar.gz压缩文件中顶层目录的列表

如何在不添加目录层次结构的情况下使用 Python 将文件添加到 tarfile?

HP-UX - 如何在不解压缩的情况下从 tar 存档中读取文本文件?