文件名已知。我需要通过 tcl 命令递归搜索目录来获取该文件的路径。
Ex: filt.txt 在目录的subdirectory1 中。我需要输出为 directory/subdirectory1/file.txt
set proj [glob -type d *]
set sol [glob -directory $proj -type d *]
#puts "$sol"
我试过这个假设只有一个目录会出现。意识到可以存在更多子目录。
一些无需自己编写目录树遍历代码的方法:
使用 TclX 包:
% package require Tclx
8.6
% for_recursive_glob file directory/ {*.txt} { puts $file }
directory/subdirectory1/file.txt
使用 tcllib 的
fileutil::traverse
包:
% package require fileutil::traverse
0.6
% proc is_text_file {filename} { string match {*.txt} $filename }
% ::fileutil::traverse iter directory -filter is_text_file
::iter
% iter foreach file { puts $file }
directory/subdirectory1/file.txt
您可以递归地使用 glob。在下面的示例代码中,$init_dir 是要搜索的初始目录,$::target 是您要查找的文件名。
proc recur_glob { init_dir } {
set list1 [glob -nocomplain ${init_dir}/*]
foreach s1 $list1 {
if { [file isdirectory $s1] } {
recur_glob $s1
} elseif { [string equal [file tail $s1] $::target] } {
puts $s1
}
}
recur_glob $init_dir