Next: 关于文件的更多方面
Up: Shell的使用
Previous: 输入和输出的控制
  目录
  索引
文件名的扩展
您可能经常想用一个命令对一组文件进行操作。通配符通常用于构筑一个文件名的扩展模式:一系列的字符和通配符可以扩展为一系列文件名。
比如:模式/etc/* 扩展为所有6.2 /etc目录下的文件。
*这个通配符可以代表任何连续的字符,
所以/etc/*将扩展为所有的以 /etc/开头的文件名的列表。
作为命令的一组参数,文件名列表显得最为有用。举个例子, /etc 目录含有一系列叫做rc0.d,
rc1.d 等子目录。平常要看这些子目录的内容,您要输入:
-
- ls /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d
ls /etc/rc4.d /etc/rc5.d /etc/rc6.d /etc/rcS.d
这些够枯燥的吧。替代的方法是,您可以使用?这个通配符:
-
- ls /etc/rc?.d
/etc/rc?.d 扩展为以rc开头,后跟一个字符而且以.d结尾的一系列文件名。
有效的通配符包括:
- *
- 匹配从零个到多个所有的字符。
- ?
- 匹配单一字符。
- [...]
- 如果您把一些字符包括在方括号里,结果将匹配
这些字符。举个例子,[abc]匹配a或b或c。如果您在左方括号加一个^,结果将是相反的;所以[^abc]
匹配所有非a,非b,非c的字符。您可使用一个范围,诸如 [a-j]匹配a到j之间的所有单一字符。这些匹配是大小写敏感的,为了匹配任何
字母,您必须使用[a-zA-Z]。
当您看了一些具体例子后,扩展名模式对您就变得相当简单了:
Expansion patterns are simple once you see some concrete examples:
- *.txt
- 这将是以 .txt结尾的所有文件名的列表,
因为 * 匹配一切。
- *.[hc]
- 这将是以 .h或 .c结尾的所有文件名的列表。
- a??
- 这将是以字母 a开头的包含三个字符的文件名的列表。
- [^a]??
- 这将是不以字母 a开头的所有包含三个字符的文件名的列表。
- a*
- 这将是以 a开头的所有的文件名,而不管整个文件名有几个字符。
向前: 关于文件的更多方面
向上: Shell的使用
向后 输入和输入的控制
  目录
  索引
John Goerzen / Ossama Othman