next up previous contents index
Next: 关于文件的更多方面 Up: Shell的使用 Previous: 输入和输出的控制   目录   索引


文件名的扩展

您可能经常想用一个命令对一组文件进行操作。通配符通常用于构筑一个文件名的扩展模式:一系列的字符和通配符可以扩展为一系列文件名。 比如:模式/etc/* 扩展为所有6.2 /etc目录下的文件。

*这个通配符可以代表任何连续的字符, 所以/etc/*将扩展为所有的以 /etc/开头的文件名的列表。

作为命令的一组参数,文件名列表显得最为有用。举个例子, /etc 目录含有一系列叫做rc0.drc1.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开头的所有的文件名,而不管整个文件名有几个字符。


next up previous contents index
向前: 关于文件的更多方面 向上: Shell的使用 向后 输入和输入的控制   目录   索引
John Goerzen / Ossama Othman