You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VMD Tcl脚本:如何获取当前工作目录最后一级文件夹名称并用于PDB文件命名

如何获取当前工作目录的最后一级名称并用于VMD Tcl脚本的输出文件名?

没问题!要实现这个需求,你可以利用Tcl的file tail命令配合pwd来提取当前工作目录的最后一级文件夹名称,这样就能轻松把它拼接到输出PDB文件名里了。

解决思路

  1. 获取当前工作目录的最后一级名称

    • pwd命令会返回当前工作目录的完整绝对路径(比如/home/your_project/A1234
    • file tail命令可以提取路径的最后一部分,也就是你需要的纯文件夹名(比如从上面的路径得到A1234
      把两者结合起来,就能得到目标字符串:set dir_name [file tail [pwd]]
  2. 拼接输出文件名
    直接把这个变量拼接到writepdb的文件名参数里即可,Tcl会自动解析变量值生成合法的文件名。

修改后的完整脚本

mol load psf run_1/structure.psf xtc run_1/postDocking_wrapped.xtc
set final [atomselect top "not (water or ions or resid 1216)" frame last]
# 获取当前工作目录的最后一级名称
set dir_name [file tail [pwd]]
# 拼接文件名并输出PDB
$final writepdb last_frame_$dir_name.pdb
puts "finished!"
quit

解释你之前遇到的问题

  • file dirname [file normalize [info script]]返回.:因为如果你的脚本是在当前工作目录下运行的,info script会返回脚本的相对路径(比如./your_script.tcl),file normalize后还是当前目录下的脚本路径,file dirname自然就返回.(当前目录的简写)。
  • pwd得到带/的完整路径:这确实不能直接用在文件名里,但file tail刚好帮你去掉了前面的路径部分,只留下纯文件夹名,完全符合文件名的要求。

内容的提问来源于stack exchange,提问作者Ludovico Pipitò

火山引擎 最新活动