syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

bashでGitのファイル名を一括置換

Git for Windowsインタラクティブシェル(コマンドラインインターフェイス)として付属するbashで、文字列置換を使ってgit mvを一括実行してみよう、という話です。

例えば

./Projects/MyClass1.cpp
./Projects/MyClass1.h
./Projects/MyClass2.cpp
./Projects/MyClass2.h
……

というように命名されたファイルがGit管理下に多数存在したとして、これらを

./Projects/MyInternalClass1.cpp
./Projects/MyInternalClass1.h
./Projects/MyInternalClass2.cpp
./Projects/MyInternalClass2.h
……

というように一括でリネームしたいとき、1つ1つgit mvしたり、TortoiseGitなどのGUIフロントエンドからいちいちファイル名を置換したりするのは気が遠くなるくらい退屈な作業です。

そういうときはbashでループを書きます。

for i in $(find . -iname "MyClass*"); do git mv "$i" "${i/MyClass/MyInternalClass}"; done

実行前に確認してみたいときはechoを入れてみます。

for i in $(find . -iname "MyClass*"); do echo git mv "$i" "${i/MyClass/MyInternalClass}"; done

さらに複雑な置換をするには正規表現を使うとよいでしょう。