You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Bash脚本实现双模式PDB文件查找、重命名及复制

带条件逻辑的PDB文件批量处理脚本

以下是满足需求的完整Bash脚本,实现"优先复制指定前缀的PDB文件,未找到则处理指定后缀文件并重命名复制"的逻辑:

#!/bin/bash

# 配置参数
mask1='MD_'       # 目标文件名前缀
mask2='_after_equil' # 需要移除的后缀(位于pdb扩展名前)
dir="./source_dir"   # 源文件目录,请根据实际路径修改
target_dir="./target_dir" # 目标目录,请根据实际路径修改

# 确保目标目录存在,不存在则自动创建
mkdir -p "$target_dir"

# 统计源目录下符合mask1前缀的PDB文件数量
count_mask1=$(find "$dir" -maxdepth 2 -name "${mask1}*.pdb" | wc -l)

if [ "$count_mask1" -gt 0 ]; then
    # 找到目标文件,直接批量复制
    find "$dir" -maxdepth 2 -name "${mask1}*.pdb" -exec cp {} "$target_dir" \;
    echo "操作完成:已复制所有以${mask1}开头的PDB文件至${target_dir}"
else
    # 未找到mask1前缀文件,处理含mask2的文件
    # 使用print0和read -d ''处理含空格/特殊字符的文件名,避免出错
    find "$dir" -maxdepth 2 -name "*${mask2}.pdb" -print0 | while IFS= read -r -d '' file_path; do
        # 提取文件名(不含路径)
        original_name=$(basename "$file_path")
        # 执行重命名逻辑:移除mask2,添加mask1前缀
        new_name="${mask1}${original_name//${mask2}/}"
        # 复制并重命名到目标目录
        cp "$file_path" "${target_dir}/${new_name}"
    done
    echo "操作完成:未找到以${mask1}开头的PDB文件,已处理含${mask2}的文件并重命名复制至${target_dir}"
fi

关键逻辑说明

  • 目录预检查:用mkdir -p确保目标目录存在,避免复制时因目录不存在报错
  • 条件判断:通过wc -l统计符合前缀的文件数量,以此触发不同处理分支
  • 安全文件名处理:使用find -print0和read -d ''组合,兼容带空格或特殊字符的文件名
  • 重命名规则:利用Bash字符串替换${var//pattern/replacement}移除指定后缀,再拼接目标前缀

示例效果

源目录待处理文件:

1rep_6nax_apo_300K_after_equil.pdb  3rep_6nax_apo_300K_after_equil.pdb
2rep_6nax_apo_300K_after_equil.pdb  4rep_6nax_apo_300K_after_equil.pdb

处理后目标目录文件:

MD_1rep_6nax_apo_300K.pdb  MD_3rep_6nax_apo_300K.pdb
MD_2rep_6nax_apo_300K.pdb  MD_4rep_6nax_apo_300K.pdb

内容的提问来源于stack exchange,提问作者James Starlight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:25:28