# 构建 find 命令的 -name 参数 find_args="" for ext in $FILE_EXTENSIONS; do if [ -n "$find_args" ]; then find_args="$find_args -o" # 使用 OR 连接符 fi find_args="$find_args -name \"*.$ext\"" done
# 使用 eval 来正确执行包含引号的 find 命令 eval find . -type f $find_args | while IFS= read -r file; do # 快速检查:文件是否包含 "date:" 并且不包含 "updated:" # 只检查文件的前10行,提高效率 if head -n 10 "$file" | grep -q "^date: " && ! head -n 10 "$file" | grep -q "^updated: "; then echo "正在处理文件: $file" # 1. 提取 date 字段的值 # 使用 grep 找到 date 行,然后用 sed 去掉 "date: " 前缀 date_val=$(grep "^date: " "$file" | sed 's/^date:[ \t]*//') # 2. 使用 sed 在 date: 行后面添加 updated: 行 # sed 的 "-i" 选项会直接修改文件,并创建备份 # a\ 表示在匹配行之后(after)追加内容 sed -i"$BACKUP_SUFFIX" "/^date: /a updated: $date_val" "$file" echo " - 已添加 updated 字段。备份文件为 ${file}${BACKUP_SUFFIX}" else # 为了不让输出太冗长,可以注释掉下面这行 echo "跳过文件 (已存在 updated 或无 date): $file" fi done