如何让Bash脚本自动识别文件名中的receptor分组并批量执行任务
自动识别所有Receptor分组并批量处理的Bash脚本修改方案
直接替换你原来的set_receptor函数和后续代码,改成以下逻辑即可实现自动识别所有唯一的receptor分组,一次性完成所有任务:
# 从符合命名格式的文件中提取所有唯一的receptor分组 receptors=($(for file in "${docking_pdb}"/*_*_*_rep*.${lig_ext}; do # 提取文件名(去掉路径和后缀),按下划线分割取第3段(对应receptor) basename "$file" .${lig_ext} | cut -d'_' -f3 done | sort -u)) # 检查是否找到有效分组 if [ ${#receptors[@]} -eq 0 ]; then echo "错误:在${docking_pdb}目录下未找到符合*_*_*_rep*.${lig_ext}格式的文件" exit 1 fi # 循环处理每个receptor分组 for receptor in "${receptors[@]}"; do echo "=== 正在处理Receptor分组: $receptor ===" for pdb in "${docking_pdb}"/*_${receptor}_*.${lig_ext}; do pdb_name=$(basename "$pdb" .${lig_ext}) pdb_name="${pdb_name/_rep1}" echo "Converting ${output}: the system ${pdb_name}" # 在这里添加你实际的文件处理命令(比如转换、执行程序等) done done
逻辑说明
- 提取唯一Receptor:遍历目标目录下所有符合命名规则的文件,用
basename剥离路径和后缀,再用cut按下划线分割文件名,提取第3段(对应你的${receptor}字段),最后用sort -u去重得到所有唯一分组。 - 边界检查:如果没有找到任何符合格式的文件,脚本会报错并退出,避免无意义的空循环。
- 批量处理:外层循环遍历每个receptor分组,内层循环执行你原来的文件处理逻辑,无需手动切换分组。
内容的提问来源于stack exchange,提问作者James Starlight
相关产品推荐
相关产品推荐

