如何使用工具命令语言从目录中获取内容



我有一个包含一些文件和配置的目录,现在我必须获取该目录的内容,并且必须使用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修剪文件名),但它们相当复杂,你通常不需要它们。你现在已经够危险的了

最新更新