为什么 tar --exclude=".*" 创建一个空存档?

为什么 tar --exclude=".*" 创建一个空存档?

我读到的所有内容都表明,要在创建 tar 存档时排除.svn和以及其他隐藏文件,请使用该模式。.htaccess--exclude=".*"

当我尝试时,我得到一个空的存档。当我省略--exclude长选项时,所有内容都会被存档。

这是我正在使用的完整命令:

tar -czvf ../_migrate/archive_2012-05-07.tgz --exclude=".*" ./*

我也尝试过这个变体,结果没有区别:

tar -czvf ../_migrate/archive_2012-05-07.tgz --exclude=".?*" ./*

答案1

您的模式不包括“.”,它是您尝试存档的目录。请使用“.?*”作为模式。

答案2

您似乎正在使用 GNU tar模式匹配在 GNU 中,tar作用于整个路径,并且不会停止于/字符。由于您使用的./是文件列表,这意味着每个文件都将匹配./*,也匹配.?*.我会尝试类似的事情--exclude='.[^/]*'

答案3

.*将要总是匹配将包含的任何文件,因为您正在使用来自的文件.(甚至其本身也匹配.*)。

您不需要执行任何操作来排除您提到的文件,无论如何它们都不会被 glob 匹配。 glob*不匹配以点为前缀的文件,除非您手动启用此类功能(通过dotglob或 shell 的等效项)。

相关内容