如何编写Bash脚本基于XML内容批量重命名文件并配置为Cron任务
适配Cron的XML文件重命名Bash脚本
脚本内容
#!/bin/bash # -------------------------- 配置区:仅需修改以下3项 -------------------------- # 存放XML文件的绝对目录路径,禁止使用相对路径 XML_DIR="/你的XML文件存放绝对路径" # 任务执行日志的绝对路径 LOG_FILE="/你的日志存放绝对路径/xml_rename.log" # 匹配规则,和现有egrep命令效果完全一致 MATCH_PATTERN='<ns2:apple>|<ns2:orange>|<ns2:melon>' # --------------------------------------------------------------------------- # 适配Cron精简环境,指定命令搜索路径避免找不到可执行程序 export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # 写入任务执行时间戳到日志 echo "===== 执行时间:$(date '+%Y-%m-%d %H:%M:%S') =====" >> "$LOG_FILE" # 流式处理符合条件的文件,用null字符分隔文件名,兼容带空格/特殊字符的文件名 # 若不需要递归处理子目录,可给grep参数追加 --max-depth 1 /usr/bin/grep -rlZ --include "*.xml" "$MATCH_PATTERN" "$XML_DIR" | while IFS= read -r -d '' file; do # 跳过非普通文件(目录、软链等) [ -f "$file" ] || continue # 提取文件名主体,不包含路径 filename=$(basename -- "$file") # 跳过已带1_前缀的文件,避免重复重命名 [[ "$filename" == 1_* ]] && continue # 拼接新文件名,保留原路径结构仅修改文件名 new_file_path="$(dirname -- "$file")/1_$filename" # 重命名:-n参数表示不覆盖已存在的同名文件,防止数据丢失 /bin/mv -n "$file" "$new_file_path" # 写入操作日志 echo "重命名完成:$file -> $new_file_path" >> "$LOG_FILE" done
前置操作
- 给脚本添加执行权限:
chmod +x /你的脚本存放绝对路径/rename.sh - 正式上线前先做测试:临时把脚本里的
/bin/mv -n改成echo /bin/mv -n,手动执行一次脚本,确认输出的重命名规则符合预期,避免误操作
Cron定时任务配置
执行crontab -e编辑当前用户的定时任务列表,按需添加对应规则,示例:
- 每天凌晨2点执行一次:
0 2 * * * /你的脚本存放绝对路径/rename.sh - 每小时执行一次:
0 * * * * /你的脚本存放绝对路径/rename.sh
内容的提问来源于stack exchange,提问作者kulan
相关产品推荐
相关产品推荐

