使用tcl搜索具有特定模式的文件
我要搜索以下模式的文件:使用tcl搜索具有特定模式的文件,tcl,Tcl,我要搜索以下模式的文件: debug_abc_xyz_123_$times 或 其中,thistimes是我从用户处获得的一个变量,其形式如下: yyyymmdd-hhmmss-IST 这不起作用: set fh [open debug_*_$times r] 还有其他方法吗?您可以使用以获取遵循此模式的文件列表(在下面,文件必须与脚本位于同一目录中;使用-directory,否则请给出路径): 一旦你得到这个,你可以浏览列表并打开一个。现在,如果有更多的文件,我不知道您想要打开哪个文件,
debug_abc_xyz_123_$times
或
其中,thistimes
是我从用户处获得的一个变量,其形式如下:
yyyymmdd-hhmmss-IST
这不起作用:
set fh [open debug_*_$times r]
还有其他方法吗?您可以使用以获取遵循此模式的文件列表(在下面,文件必须与脚本位于同一目录中;使用-directory
,否则请给出路径):
一旦你得到这个,你可以浏览列表并打开一个。现在,如果有更多的文件,我不知道您想要打开哪个文件,所以我假设只有一个
set fh [open $files r]
正如Hoodiecrow正确提到的那样,如果文件名包含可能破坏上述代码的字符,则最好使用lindex
file:
set fh [open [lindex $files 0] r]
如果要获取最新文件,可以使用
file mtime
和循环来帮助:
set latest_file ""
set latest_date 0
foreach file $files {
set mtime [file mtime $file]
if {$mtime > $latest_date} {
set latest_date $mtime
set latest_file $file
}
}
set fh [open $latest_file r]
如果您有多个文件具有相同的修改日期,则上述文件将按照它们是
glob
bed.否的顺序打开第一个文件。。我已经生成了许多文件,并在最后附加了上述给定的时间戳。所以我只需要根据时间戳和模式搜索文件。第一个解决方案奏效了。谢谢:)@aro-Oh-duh-lol。忘了那个。现在把它放在这里不会有什么坏处。不客气!请注意,即使列表中只有一个文件,如果文件名包含空格或其他无法在列表中不加引号的字符,则使用文件列表作为打开
的参数也可能失败。最好使用打开[lindex$files 0]
,即使[llength$files]==1
。
set fh [open [lindex $files 0] r]
set latest_file ""
set latest_date 0
foreach file $files {
set mtime [file mtime $file]
if {$mtime > $latest_date} {
set latest_date $mtime
set latest_file $file
}
}
set fh [open $latest_file r]