You need to enable JavaScript to run this app. 如何编写Bash脚本基于XML内容批量重命名文件并配置为Cron任务
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 22:27:03