我使用以下sed命令查找并替换字符串:
find dir -name '*.xml' -exec sed -i -e 's/text1/text2/g' {} \;
这会更改dir中所有.xml文件的时间戳
但是,我如何保留旧的时间戳?
由于
答案 0 :(得分:4)
使用stat
和touch
find dir -name '*.xml' -exec bash -c 't=$(stat -c %y "$0"); sed -i -e "s/text1/text2/g" "$0"; touch -d "$t" "$0"' {} \;
使用cp
和touch
find dir -name '*.xml' -exec bash -c 'cp -p "$0" tmp; sed -i -e "s/text1/text2/g" "$0"; touch -r tmp "$0"' {} \;
来自手册:
-p与--preserve = mode,ownership,timestamps
相同
-r, - reference = FILE 使用此文件的时间而不是当前时间
-d, - date = STRING 解析STRING并使用它代替当前时间
的参考:强>
答案 1 :(得分:1)
您可以使用
代替复制整个文件touch -r <file> tmp
因此您将时间戳保存在tmp文件中,但是没有内容...