`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

関連情報