Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

タイムスタンプを変えずにテキストファイル中の文字列を置換する

howmで大量に作ったファイル中のWiki風リンク[[foo]][[bar]]に変えたいとかの場合。howmのテキストファイルが保存されているディレクトリにcdして以下のように実行する。

find . -xdev -type f -exec sed -i.bak 's/\[\[foo\]\]/\[\[bar\]\]/g' {} \; -exec touch -r {}.bak {} \; -exec rm {}.bak \;

コツはsed -i.bakで文字列置換の際にバックアップファイルを作ることと、touch -rでそのバックアップファイルのタイムスタンプを参照すること。