如何在没有顶层目录的情况下创建 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 归档来自不同目录的文件