glob(3tcl) Tcl Built-In Commands glob(3tcl)

glob - 返回匹配模式的文件名

glob ?switches? pattern ?pattern ...?

这个命令用与 csh shell 类似的方式进行文件名的“通配符匹配”。它返回文件名匹配 pattern (模式)参数中的所有文件的一个列表。

如果给 glob 的初始参数以 - 开始,则它们将被作为选项来对待。当前支持下列选项开关:

-directory directory
在这个给定的 directory (目录)中开始查找匹配给定模式的文件。这允许查找名字中包含通配符敏感字符的目录而不需要显式的引用这些字符。这个选项不能与-path 联合使用。
-join
把通过剩余的模式参数用目录分隔符连接起来作为一个单一的模式来对待。
-nocomplain
允许返回一个空列表而不是返回一个错误;要是没有这个开关的话,如果结果列表为空则返回一个错误。
-path pathPrefix
查找有给定的 pathPrefix (路径前缀)的文件,名字中余下的部分匹配给定模式。这个选项允许查找与一个给定文件有类似的名字的文件,包括名字中包含通配符敏感的字符的情况。这个选项不能与-directory 联合使用。
-types typeList
只列出匹配 typeList (类型列表)的文件或目录,在这个列表中的元素有两种形式。第一种形式类似 Unix find 命令的 -type 选项: b (块特殊文件 block special file), c (字符特殊文件 character special file), d (目录 directory), f (单纯文件 plain file), l (符号连接 symbolic link), p (命名管道 named pipe), or s (套接口 socket), 在这个列表中可以指定多个类型。Glob 返回至少匹配一个类型的所有文件。

对于第二种形式指定的类型,所有给出的类型都必须匹配。它们是作为文件权限的 rwx和作为特殊权限的实例的 readonlyhidden。在 Macintosh 上,还支持 MacOS 类型和建立者,假定任何四个字符长的项目都是一个 MacOS 类型(例如 TEXT)。有{macintosh type XXXX}{macintosh creator XXXX} 形式的项目将分别的匹配类型或建立者。不可识别的类型,或多个 MacOS 类型/建立者指定将导致错误。

以混合两种类型,所以 -types {d f r w} 将找到有读写权限的正规文件目录。下列命令等价:

glob -type d *
glob */
但第一种情况不返回尾部的 ``/'' 并且更加不依赖平台。
--
标志着选项的结束。此后的参数即使以 - 开始仍将被作为pattern 对待。

pattern 参数可以包含任意下列特殊字符:

?
匹配任何单一字符。
*
匹配零个或多个字符的任何序列。
[chars]
匹配在 chars 中的任何单一字符。如果 chars 包含 a-b 形式的一个序列则匹配在 ab 之间(包括它们在内)的任何字符。
\x
匹配字符 x
{a,b,...}
匹配字符串 ab等中的任何一个。

与 csh 一样, 在一个文件的名字的开始处或紧随“/”之后的那个“.”必须被显式的(explicit)匹配或与一个 {} 构造(construct)相匹配。额外的,所有“/”字符必须显式的匹配。

如果在一个 pattern中的第一个是“~”,则它参照一个用户的主目录,这个用户的名字紧随在“~”之后。如果 “~”的后面紧随着一个“/”,则使用 HOME 环境变量的值。

glob与 csh globbing 在两个方面有区别。首先,它不排序它的结果列表(如果你想排序的话使用 lsort 命令)。其次,glob 只返回实际存在的文件的名字;在 csh 中除非一个模式包含一个 ?、*、或 [] 构造,否则不检查文件是否存在。

不象其他 Tcl 命令那样接受网络和本地式样的两种名字(关于如何指定本地和网络名字的详情参见 filename手册条目),而 glob 命令只接受本地名字。
Windows
对于 Windows UNC 名字,路径组成部分中的服务器名和共享名不能包含?、*、或 [] 构造。在 Windows NT 上,如果 pattern 有 ``~username@domain'' 的形式,则它参照一个用户的主目录,这个用户的帐号信息驻留在指定 NT 域控制器上。否则,从本地计算机获取用户帐号信息。在 Windows 95 和 98 上,glob 接受象“.../” 和 “..../”这样的模式,用于连续的更上层的父目录。
Macintosh
在使用了选项 -dir-join-path 的时候,glob 假定给整个模式的目录分隔符是标准的“:”。在不使用这些选项的时候,glob 检查每个模式参数,除非这个模式包含一个“:”,否则使用“/”。

file(n)

exist, file, glob, pattern

寒蝉退士

2001/09/03

http://cmpp.linuxforum.net

本页面中文版由中文 man 手册页计划提供。
中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh
8.3 Tcl