我有一个包含一些文件和配置的目录,现在我必须获取该目录的内容,并且必须使用TCL代码运行脚本。我如何编写脚本从目录中获取内容
glob命令返回匹配模式的文件名
(Programs) 1 % glob *.bat
dl.bat get8.bat rfts.bat sdx.bat update.bat ws.bat zrm.bat
打印请求目录内容的过程
proc dir_content {dir_name} {
puts [glob ${dir_name}/*]
}
dir_content [file normalize some_dir]
glob
命令列出目录的内容。它需要一个文件模式(或许多模式)来查找,并且还需要许多选项。我们会回来讨论这些。
从一个简单的例子开始是最容易的。让我们列出当前目录下的Tcl源文件:
glob *.tcl
列表以随机顺序返回(它不是真正的随机,但它取决于操作系统和文件系统,并且不容易预测,所以它也可能是随机的)。让我们获取所有文件名并将它们存储在一个变量中:
set allFiles [glob *]
# Really ought to use:
# set allFiles [glob * .*]
# to also pick up all Unix hidden files.
但是列出其他目录呢?嗯,到目前为止,最好的选择是-directory
选项。
set theDir "~/Documents/examples"
set allFilesInDir [glob -directory $theDir *]
(您可以将目录放在模式- $theDir/*
中-但是如果您在文件模式元字符和目录名称之间有冲突,那么如果您这样做,某些目录名称可能会出现问题。为安全起见,最好使用-directory
另一个非常有用的选项是-nocomplain
,所以当你列出一个空目录时,你只会得到一个空列表。(由于历史原因,如果没有该选项,当结果为空时,您将最终得到一个可捕获的错误。)
set allFilesInDir [glob -directory $theDir -nocomplain *]
有更多的选项(例如,用-type
按目录条目类型过滤,用-tails
修剪文件名),但它们相当复杂,你通常不需要它们。你现在已经够危险的了