通常,如需要对多个文件对象执行单一操作,而不需要像前面的递归操作一样对整个树进行操作。例如,你可能想要找出在某个目录下中创建的所有文本文件的修改时间,而不需要列出分散的文件。尽管这很容易在小目录中实现,但是对于大型文件系统则非常困难。
要解决这个问题,可以使用 bash shell 中内置的通配符(wildcard)支持。这种支持也称为“globbing”(因为它最初被实现为一个名为 /etc/glob 的程序),让你能够使用通配符模式指定多个文件。
包含任何 '?'、'*' 或 '[' 字符的字符串就是一个通配符模式。Globbing 是指 shell(或另一个程序)将这些模式扩展为一组匹配该模式的参数的过程。这种匹配按照如下方式完成:
表1 Linux中常用通配符
字符 含义 实例 *
匹配 0 或多个字符
a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
?
匹配任意一个字符
a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list]
匹配 list 中的任意单一字符
a[xyz]b a与b之间必须也只能有一个字符,但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list]
匹配除list 中的任意单一字符
a[!0-9]b a与b之间必须也只能有一个字符,但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2]
匹配 c1-c2 中的任意单一字符如:[0-9] [a-z]
a[0-9]b 0与9之间必须也只能有一个字符如a0b, a1b... a9b。
{string1,string2,...}
匹配 sring1 或 string2 (或更多)其一字符串
a{abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。
我们常常在 ls、cp、mv 或 rm 命令中需要操作多个文件或目录名时使用通配符。
注意
'*' 和 '?' 字符与它们自身匹配。如果在文件名中使用这些字符,那么需要注意适当的引用或转义。
两个字符之间的 '-' 字符表示一个范围,包括这两个字符和排序序列中介于这两个字符之间的所有字符。例如,[0-9a-fA-F] 表示任何大写或小写十六进制数位。你可以通过将 '-' 放到一个范围的首位或末位来匹配它。
'!' 在Shell中是有特殊含义的,因此需要小心地对它进行适当的转义。
文件通配符被单独应用到路径名的每个组成中。但我们无法匹配'/'。
小心 命令中的任何通配符都可以被 shell 扩展,这将导致意外的结果。在使用 cp、mv 或 rm 出现异常行为之前,使用 ls 检查你的通配符模式。
转载于:https://my.oschina.net/u/3127489/blog/1554179