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 ..
}
文件结构
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 ..
}