git filter-branch で特定のファイルだけを残すのは find 内完結の方が良い2019年01月29日 13時14分09秒

以前の git filter-branch で特定のファイルだけを残すでは、find の結果を xargs に渡していたが、 削除対象になるファイルが無いと filter-branch が止まってしまう。rm に -f を渡せば、エラーコードが返ることも無いが、強制削除になる点が恐かった。

そこで、-exec を使って若干完結化。

% git filter-branch --tree-filter 'find * ! -type f -name "*.sh" -type f -exec rm {} \+' --prune-empty
find の -exec を \; で終らせると、コマンドは各一つづつのファイルに対してコマンドが実行され、\+ だと、複数の対象ファイルに対してコマンドが実行される様になる。

一番ややこしかったのが、文字列のエスケープ。filter-branch に渡すコマンドが一段回展開されてしまうので、普段の要領で find を使うと何処にバックスラッシュをつけるのかがこんがりやすい。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2019/01/29/9030150/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。