glob模式及 . 和 ..

glob模式及 . 和 ..

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式,它的规则如下:

1、星号(*)匹配零个或任意 多个 字符;

2、 问号(?)只匹配一个任意字符;

3、[abc],匹配任何一个列在方括号中的字符,这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c)

4、 [0-9] or [a-z], 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配,比如 [0-9] 表示匹配所有 0 到 9 的数字,[a-z]匹配从a到z的26个字母;

而 . 和 .. 在文件系统中分别表示:当前目录 和 上级(父)目录

那么如何构建匹配除了"."和".."外所有文件的glob模式呢?(该问题转自http://lcuc.org.cn/node/163 )

http://lcuc.org.cn/node/163 写道
这样考虑的话会比较简单:

* 匹配所有不以"."开头的文件;

.* 匹配所有所有以"."开头的文件,但包括"."和"..",它们是你想排除的;

.[~.]* (只对较新的shell有效;一些shell用"^"代替"!";POSIX shell必须接受"!",但也可接受"^";所有可移植程序不应该在"["后立即跟随未加引号的"^") ,匹配所有以"."开头,跟随非"."的文件;但它会遗漏"..foo";

.??* 匹配所有开始以"."开头且至少3个字符常。 这避开了"."和"..",但会遗漏如".a"

所以要安全地匹配除了"."和".."的所有文件你需要三个模式,(如果你没有类似".a"的文件名,可以不用第一个模式)

请注意:以上写法,在不同shell下会有具体差异。

猜你喜欢

转载自cnetwei.iteye.com/blog/1157772