创建当前目录的tar归档文件,不带前期


10

当我执行以下操作时:

tar czvf ../myarchive.tar.gz ./

我在tar归档文件中得到一个(讨厌的)根文件夹:

烦人的

创建归档文件时,如何删除这段可怕的时期?


此堆栈溢出答案可能会对您有所帮助。
2014年

3
或使用--transform/ --xform,如Magnus所建议:tar -cf /path/to/output.tar -C /path/to/input-directory . --xform='s!^\./!!'
n.st 2014年

Answers:


6

你不知道

name=${PWD##*/}
cd ..
tar czf "$name.tar.gz" "$name"

(注意:如果您的外壳程序打开了当前目录符号链接跟踪,并且通过符号链接访问了当前目录,则此方法无效。)

是的,这不是您要的,但这是您应该做的。在当前目录中扩展大量文件的存档很烦人:这给每个解压缩存档的人增加了为文件创建目标目录的负担,并且如果他们不小心将其解压缩到非空目录中,则很难清理。在大多数情况下,归档文件应该创建一个顶级目录,该目录的名称是归档文件的基本名称。


明白了 如果我没有记错,它只是真的很烦必须做一个额外的步骤来解压缩归档到一个特定的目录(如tar xzvf archive.tar.gz && mv archive/* /outputunzip archive.zip -d /output
Naftuli凯

9

出现点是因为tar您按照输入参数的方式创建路径结构。因此,正如你所给的作为源,归档文件也以相同的结构创建。

您可以试试看并检查:

tar -czvf ../myarchive.tar.gz *

在n.st的评论帮助下更新答案

tar --xform s:'./':: -czvf ../myarchive.tar.gz ./

1
*水珠不匹配的隐藏文件。
2014年

:D eh ..只是一个初学者..didnt意识到。
beginer

您可以使用更多bash glob来包含隐藏文件- 在这里查看
2014年

0

最好在前面加上^。

tar --xform s:'^./':: -czvf ../myarchive.tar.gz ./

或者,除非完整路径名的末尾是“ /”,否则归档中完整路径名中的所有“ /”都将被删除。


1
请建议对该答案进行修改,而不要发布单独的答案:unix.stackexchange.com/posts/144094/edit
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.