我以为我理解了通配符,直到发生在我身上。基本上,我正在寻找一个外卡模式,它将返回所有未命名为.gitignore
的文件。我想出了这个,这似乎适用于我能想到的所有情况:
ls *[!{gitignore}]
要真正验证这是否有效,我想我会否定表达式,看看它是否返回名为.gitignore
的文件(实际上是以gitignore
结尾的任何文件;所以1.gitignore
也应该退回)。为此,我认为否定的表达是:
ls *[{gitignore}]
但是,此表达式不会返回名为.gitignore
的文件(尽管它返回名为1.gitignore
的文件)。
基本上,我的问题,在简化之后,归结为:
为什么* .abc不匹配名为.abc
的文件
我想我可以从那里接受它。
PS:
.gitignore
添加一个子句,以便忽略给定文件夹中除.gitignore
之外的所有文件。所以我最终在*
文件中添加了.gitignore
。结果是,git最终忽略了.gitignore
:)Use the asterisk character (*) to represent zero or more characters.
答案 0 :(得分:3)
我假设您正在使用Bash。来自Bash manual:
然而,当模式用于文件名扩展时,除非设置了shell选项dotglob,否则必须明确匹配文件名开头或紧跟斜杠后面的字符“。”。
.gitignore模式的处理方式不同:
否则,git将模式视为适合fnmatch(3)使用FNM_PATHNAME标志的shell glob:模式中的通配符与路径名中的/不匹配。
根据fnmatch(3) docs,只有在FNM_PERIOD
标志设置的情况下才必须明确匹配前导点,因此作为gitignore模式的*gitignore
将匹配.gitignore
。
但是,有一种更简单的方法可以实现这一目标。让.gitignore
忽略除.gitignore
以外的所有内容:
*
!.gitignore
答案 1 :(得分:2)
如果您想忽略除 gitignore
文件之外的所有内容,请将其用作文件:
*
!.gitignore
以感叹号开头的行被解释为例外。