如何在 tcl 中获取文件的路径?

问题描述 投票:0回答:2

文件名已知。我需要通过 tcl 命令递归搜索目录来获取该文件的路径。

Ex: filt.txt 在目录的subdirectory1 中。我需要输出为 directory/subdirectory1/file.txt

set proj [glob -type d *]
set sol [glob -directory $proj -type d *]
#puts "$sol"

我试过这个假设只有一个目录会出现。意识到可以存在更多子目录。

file search command tcl glob
2个回答
0
投票

一些无需自己编写目录树遍历代码的方法:

使用 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

0
投票

您可以递归地使用 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
© www.soinside.com 2019 - 2024. All rights reserved.