📁

Mac でフォルダ内にあるファイルの中身全ての文字列を一気に置換する

2020/10/29に公開
rg -l '置換前' ./* | env LC_ALL=C xargs sed -i.bak -e 's/置換前/置換後/g'

とすることで, そのフォルダ内にある全てのファイルの中身にある 置換前 という文字列が一度に 置換後 に置き換わる。

rg とは何か?

ripgrep のこと。grep よりも高速であり, かつ, デフォルトで再帰的にファイルを探索してくれる。
Mac なら

brew install ripgrep

でインストールできる。

env LC_ALL=C はなぜ必要か?

sed が .DS_Store のようなバイナリを見なくなり, その結果 sed: RE error: illegal byte sequence というエラーが表示されなくなるため。

*.bak という謎のファイルが大量にできたが?

バックアップ用の元のファイルなので, 不要なら rm -r *.bak(fish shell なら rm -r **.bak)してください

関連: フォルダ内にあるファイル名・フォルダ名全ての文字列を一気に置換する

Discussion