![为什么 tar --exclude=".*" 创建一个空存档?](https://linux22.com/image/22897/%E4%B8%BA%E4%BB%80%E4%B9%88%20tar%20--exclude%3D%22.*%22%20%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%A9%BA%E5%AD%98%E6%A1%A3%EF%BC%9F.png)
我读到的所有内容都表明,要在创建 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 的等效项)。