列出以下子目录1级中的所有文件?

时间:2014-07-07 19:46:29

标签: tcl

我正在尝试列出所有正好低于1级的* .tcl文件。 如

./dirA/x.tcl
./dirB/y.tcl
./dirC/z.tcl

我使用foreach命令列出所有文件&子目录下的目录,但输出为空..

foreach dir [glob -type d *] {        
    glob -path ./$dir *    
}

2 个答案:

答案 0 :(得分:2)

首先,您可能需要-directory选项而不是-path选项。它可以缩写为-dir。此外,您希望文件与*.tcl匹配,而不是每个文件(*)。

foreach dir [glob -type d *] {        
    glob -dir $dir *.tcl
}

其次,foreach命令不会收集它运行的脚本的结果,因此您需要自己执行此操作:

set files [list]
foreach dir [glob -type d *] {        
    lappend files {*}[glob -dir $dir *.tcl]
}

现在files变量应该包含您想要的文件名。

如果您使用旧版本的Tcl(8.5之前),则需要像这样编写:

set files [list]
foreach dir [glob -type d *] {        
    set files [concat $files [glob -dir $dir *.tcl]]
}

文档:concatforeachgloblappendset

答案 1 :(得分:2)

你只需要一次对glob的调用:

set tcl_files [glob */*.tcl]