我尝试 tar.gz 一个目录并使用
tar -czf workspace.tar.gz *
生成的 tar 包括 .svn
子目录中的目录,但不在当前目录中(因为 *
在传递给 tar 之前仅扩展为“可见”文件
我尝试过了
tar -czf workspace.tar.gz .
但后来我收到一个错误,因为’。’阅读时发生了变化:
tar: ./workspace.tar.gz: file changed as we read it
是否有技巧使 *
匹配目录中的所有文件(包括点前缀)?
(在 Linux SLES-11 (2.6.27.19) 上使用 bash
原文由 Micha 发布,翻译遵循 CC BY-SA 4.0 许可协议
不要在要打包的目录中创建 tar 文件:
做的伎俩,除了它会在你解压缩时提取当前目录中的所有文件。更好的做法:
或者,如果您不知道所在目录的名称:
(这假设您没有按照符号链接到达您所在的位置,并且 shell 不会尝试通过符号链接向后跳来猜测您 -
bash
在这方面是不可信的。如果您必须担心这一点,使用cd -P ..
进行物理更改目录。愚蠢的是,这不是我认为的默认行为 - 至少对于那些cd ..
从来没有任何替代的意思。)讨论中的一条评论说:
注释的第一部分没有多大意义 - 如果 tar 文件包含当前目录,则从该存档中提取文件时不会创建它,因为根据定义,当前目录已经存在(除非在非常奇怪的情况下)。
可以通过以下两种方式之一处理评论的第二部分:
/tmp
是一个可能的位置 - 然后在完成后将其移回原始位置。--exclude=workspace.tar.gz
选项。=
之后的字符串是一个模式 - 示例是最简单的模式 - 完全匹配。如果您违反建议在当前目录中工作,您可能需要指定--exclude=./workspace.tar.gz
;您可能需要指定--exclude=workspace/workspace.tar.gz
如果您按照建议进行上一级工作。如果要排除多个 tar 文件,请使用 ‘*
‘,如--exclude=./*.gz
。