【问题标题】:Preserve timestamp in sed command在 sed 命令中保留时间戳
【发布时间】:2017-03-16 13:46:27
【问题描述】:

我正在使用以下 sed 命令来查找和替换字符串:

find dir -name '*.xml' -exec sed -i -e 's/text1/text2/g' {} \;

这会改变 dir 中所有 .xml 文件的时间戳

但是,如何保留旧的时间戳?

谢谢

【问题讨论】:

    标签: linux sed rhel


    【解决方案1】:

    你可以使用而不是复制整个文件

    touch -r <file>  tmp 
    

    所以您将时间戳保存在 tmp 文件中但没有内容...

    【讨论】:

      【解决方案2】:

      使用stattouch

      find dir -name '*.xml' -exec bash -c 't=$(stat -c %y "$0"); sed -i -e "s/text1/text2/g" "$0"; touch -d "$t" "$0"' {} \;
      


      使用cptouch

      find dir -name '*.xml' -exec bash -c 'cp -p "$0" tmp; sed -i -e "s/text1/text2/g" "$0"; touch -r tmp "$0"' {} \;
      


      来自手册:

      • cp -p

        -p 与 --preserve=mode,ownership,timestamps 相同

      • 触摸-r

        -r, --reference=文件 使用此文件的时间而不是当前时间

      • 触摸-d

        -d, --date=字符串 解析 STRING 并使用它而不是当前时间


      参考:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        • 2017-09-20
        相关资源
        最近更新 更多