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

AIX系统下使用SED处理子目录文件且不修改目录时间戳的咨询

AIX sed批量替换保留目录时间戳解决方案

问题原因

子目录时间戳更新是因为原脚本在待处理文件所在目录下创建、删除临时文件,目录内文件增删操作会触发目录元数据更新,导致目录mtime变更。

优化思路

将所有临时文件创建在系统公共临时目录(如/tmp),不在业务目录下做文件增删操作,仅修改目标文件本身的内容,即可避免子目录时间戳被更新。

修正后脚本

# 创建独立临时工作目录,避免进程冲突
WORK_TMP=$(mktemp -d /tmp/log_replace.XXXXXX)
# 遍历所有目标log文件
find . -type f -name "*.log" -print0 | while IFS= read -r -d '' f
do
    # 生成唯一临时文件名
    tmp_file="${WORK_TMP}/$(basename "$f")_$$.tmp"
    # 备份原文件时间戳
    touch -r "$f" "$tmp_file"
    # 执行替换输出到临时文件
    sed "s/str1/str2/g" "$f" > "$tmp_file"
    # 用替换后的内容覆盖原文件(不触发目录文件增删)
    cat "$tmp_file" > "$f"
    # 恢复原文件的时间戳
    touch -r "$tmp_file" "$f"
    # 清理临时文件
    rm -f "$tmp_file"
done
# 全局临时目录清理
rm -rf "$WORK_TMP"

说明

  • 采用find -print0 + read -d ''的写法兼容带空格、特殊字符的文件名
  • 替换逻辑不涉及业务目录下的临时文件创建/删除,不会触发目录元数据变更
  • sed命令后加g代表全局替换,若仅需替换每行第一个匹配内容可删除该参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 21:03:03