`sed` 更新所有访问文件的元日期

`sed` 更新所有访问文件的元日期

我曾经sed -i 's/oldpat/newpat/g' ~/mydir/**/*.txt替换一些文本文件中的一些str。

但是,所有文件的修改日期(包括内容未更改的文件)均已更改为当前日期,sed并且我丢失了它们的时间信息。

使用时是否有办法避免更新文件日期sed

答案1

可悲的是,看起来像这样sed,有了-i开关,总是创建一个临时文件(强调我的):

-i[SUFFIX]
--in-place[=SUFFIX]

此选项指定要就地编辑文件。 GNU `sed' 通过以下方式做到这一点创建临时文件并将输出发送到该文件而不是标准输出。(1)。

该选项意味着-s.

当到达文件末尾时,临时文件被重命名为输出文件的原始名称。扩展名(如果提供)用于在重命名临时文件之前修改旧文件的名称,从而制作备份副本(2))。

这意味着即使文件内容不会被更改sed,原始文件也会被重新创建。

解决方法是使用一个脚本,该脚本用于grep在使用之前查找文件是否需要替换sed

一个简单的例子:

for FILE in ~/mydir/**/*.txt 
do
    if grep -q PATTERN "$FILE"; then
         sed -i 's/oldpat/newpat/g' "$FILE"
    fi
done

-q它的开关用于grep防止它将匹配行输出到stdout

相关内容