ZetCode

Tcl glob 命令

最后修改于 2025 年 4 月 3 日

Tcl 的 glob 命令用于将文件名与模式进行匹配。它返回与指定模式匹配的文件列表。这对于文件操作和目录列表非常有用。

基本定义

glob 命令扩展通配符模式以匹配文件名。它支持与 Unix shell globbing 类似的各种模式匹配字符。

语法:glob ?switches? ?--? ?pattern ...?。该命令返回与模式匹配的文件列表。开关会修改其行为。

基本文件匹配

此示例展示了 glob 最简单的用法,用于列出当前目录中的所有 .tcl 文件。

basic_glob.tcl
set tcl_files [glob *.tcl]
puts "Tcl files: $tcl_files"

模式 *.tcl 匹配所有以 .tcl 结尾的文件。结果存储在 tcl_files 中并打印出来。这是区分大小写的。

多个模式

glob 可以接受由空格分隔的多个模式。

multi_pattern.tcl
set files [glob *.tcl *.txt]
puts "Matching files: $files"

这将匹配 .tcl 和 .txt 文件。结果是匹配任一模式的所有文件的合并列表。结果中的顺序不保证。

隐藏文件

默认情况下,glob 不匹配隐藏文件(以点开头的文件)。-nocomplain 开关可防止在找不到匹配项时出现错误。

hidden_files.tcl
set hidden_files [glob -nocomplain .*]
puts "Hidden files: $hidden_files"

.* 模式匹配隐藏文件。-nocomplain 在不存在匹配项时返回一个空列表,而不是引发错误。

目录递归

-directory-recursive 开关允许在特定目录和子目录中进行搜索。

recursive_glob.tcl
set all_tcl [glob -directory /path/to/tcl -recursive *.tcl]
puts "All Tcl files: $all_tcl"

这会在 /path/to/tcl 及其子目录中查找所有 .tcl 文件。-recursive 开关启用深度目录遍历。

类型过滤

-type 开关按文件类型(文件、目录等)过滤匹配项。

type_filter.tcl
set directories [glob -type d *]
puts "Directories: $directories"

这将仅列出当前文件夹中的目录。-type d 匹配目录,而 -type f 只匹配文件。

不区分大小写的匹配

-nocase 开关启用不区分大小写的模式匹配。

nocase_glob.tcl
set image_files [glob -nocase *.JPG *.png]
puts "Image files: $image_files"

这将匹配 .jpg/.JPG 和 .png 文件,而不区分大小写。在处理来自不同操作系统的文件时非常有用。

最佳实践

本教程介绍了 Tcl 的 glob 命令,并通过实际示例展示了其在不同文件匹配场景下的用法。

作者

我叫 Jan Bodnar,我是一位热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Tcl 教程