TCL脚本遍历目录中的所有文件夹并执行功能

TCL script to go through all folders in a directory and perform a function

文件结构

File1
 test.pdb
 xyz.txt

File2
 test.pdb
 xyz.txt

File3
 test.pdb
 xyz.txt

我想遍历目录中的所有文件夹和 运行 Tk 控制台上文本文件 autopsf.tcl 中的以下代码:

package require autopsf
mol new test.pdb
autopsf -mol 0

package require solvate  
solvate test_autopsf.psf test_autopsf.pdb -t 5 -o solvate

package require autoionize
autoionize -psf solvate.psf -pdb solvate.pdb -neutralize

我现在运行正在编写以下代码:

for d in ./*/ ; do
source autopsf.tcl
done

如果你不在乎顺序,你可以这样做:

foreach dir [glob -type d *] {
    # safety check
    if {![file exists $dir/test.pdb]} continue 
    # code to do the work here; note that we have directories
}

您或许可以排除 package require 调用。设计良好的包可以正确地共存,将它们放在顶部是使依赖关系明显的有用方法。

如果要对目录进行排序,请将 lsort 应用于 glob 的输出。 glob 的默认顺序是 OS 给我们的目录条目,并且可以取决于各种各样的事情(包括文件年龄等)所以它不应该在代码中依赖一定的处理事项。

这段代码对我有用:

foreach file [glob -nocomplain "./*/"] {
cd $file
source autopsf.tcl
cd ..
}