如何根据flag文件的数值段仅GPG加密对应匹配的数据文件
Shell 脚本优化方案
核心逻辑
遍历所有已生成的flag文件,提取文件名中的数字标识,仅对匹配该标识的对应数据文件执行加密操作,彻底避免无对应flag的文件被误加密。
优化后完整脚本
#!/bin/bash # 加载业务环境变量 . /pbapps/pbmis/apps/apps_st/appl/APPSpbmis_ennycebs02.env # 统一配置工作目录,后续调整路径仅需修改此处 WORK_DIR="/misc/pbmis/output" # 遍历所有flag文件 for flag_file in "${WORK_DIR}"/SendPaysource.*; do # 兼容无flag文件时通配符原样返回的异常场景 [ -e "${flag_file}" ] || continue # 提取flag文件后缀的数字标识 file_id=$(basename "${flag_file}" | awk -F '.' '{print $NF}') # 拼接对应的数据文件完整路径 target_data_file="${WORK_DIR}/WSPGLOBAL.PAYMENTS.ISO20022_PAIN_01Ver3.${file_id}.xml" # 确认数据文件真实存在后再执行加密 if [ -f "${target_data_file}" ]; then gpg --always-trust --no-tty -se --passphrase xxxxxxxxx -r xxxxx.xxxxx.com "${target_data_file}" # 可选功能:加密完成后删除已处理的flag文件,避免脚本重复执行时重复处理 # rm -f "${flag_file}" # 可选功能:添加处理日志 # echo "$(date '+%Y-%m-%d %H:%M:%S') 已完成文件${target_data_file}加密" >> /var/log/gpg_encrypt.log fi done
优化点说明
- 解决原脚本误加密问题:不再使用全量
*.xml通配符匹配所有数据文件,仅处理有对应flag文件的目标文件 - 异常兼容性提升:新增多重文件存在性判断,避免无flag文件、flag存在但数据文件未生成/未写完的场景下执行异常
- 可维护性优化:工作目录抽为统一变量,后续路径调整仅需修改一处
- 扩展能力支持:注释提供了去重处理、日志记录的可选实现,可根据业务需求直接启用
内容的提问来源于stack exchange,提问作者mek404
相关产品推荐
相关产品推荐

