better done than better said

困ったときに調べた結果

プロジェクトのファイル内容を一括置換する

来年所属する会社の事業が子会社化するため各サービスのプロジェクトのコピーライトやらリンクを変更しなくてはならなくなったので簡単な一括置換のワンライナーを組んだのでメモ。(* 使ってる環境はmac)

$ LANG=C find . -type f \( -name \*.js -o -name \*.css -o -name \*.html \) -exec sed -i '' -e 's/置換1/置換後1/g;s/置換2/置換後2/g' {} +;
$ LANG=C find . -type f \( -name \*.js -o -name \*.css -o -name \*.html \) -exec sed -i '' -e '/削除文字列/d' {} +;
  1. LANG=C でファイルの文字コード依存を解消する
  2. findで変換したいファイルの拡張子を固定
  3. sedで置換、1行削除を行う

コードの末尾に改行がないファイルはNo newline at end of fileのエラーで余計な差分が出るので以下のgitコマンドでファイルをaddする。

$ git diff -w # 改行コードや空白を無視して変更を確認
$ git diff -w --no-color | git apply --cached # 改行のみの変更点を除外してadd
$ git co . # 改行のみの変更点を戻す

もっと簡単な方法はあるんだろうけどぱっと変更できる形が上記でした。
適当なシェルなどを組んで引数に変更点を渡して使えるようにしとけば良いかも。