保留sed命令中的时间戳

时间:2016-11-03 03:59:41

标签: linux sed rhel

我使用以下sed命令查找并替换字符串:

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

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

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

由于

2 个答案:

答案 0 :(得分:4)

使用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 = FILE   使用此文件的时间而不是当前时间

  • 触摸-d
      

    -d, - date = STRING   解析STRING并使用它代替当前时间


参考:

答案 1 :(得分:1)

您可以使用

代替复制整个文件
touch -r <file>  tmp 

因此您将时间戳保存在tmp文件中,但是没有内容...