0

文件结构

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
4

2 回答 2

1

如果您不关心订单,您可以执行以下操作:

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是操作系统为我们提供的目录条目,并且可以取决于各种事物(包括文件年龄等),因此不应在确定处理问题的代码中依赖它。

于 2019-11-13T02:15:27.527 回答
0

这段代码对我有用:

foreach file [glob -nocomplain "./*/"] {
cd $file
source autopsf.tcl
cd ..
}
于 2019-11-21T00:51:49.073 回答