rmしたやつをsvn rmする
Subversion管理下にあるファイルを削除したい場合は、普通のrm
ではなくsvn rm
する必要がある。
でも、たまにうっかり、rm
で大量に消してしまうことがある。そうすると、同じファイルを1つ1つsvn rm
する必要がある。しかも、ファイルが存在しないから自動補完が効かない。
というわけで、sedを組み合わせて自動で消してみた。
svn status | \ sed -n '/^!/s/^! *\(.*\)/"\1"/p' | \ xargs svn rm
で、残りはこれが何をやっているか解説しよう。未来の自分のためのメモ。
これを応用すれば、ファイルをまとめてsvn addするとかできるはず。
svn status
まず、svn status
は失われたファイルの先頭に"!"を付けて表示する。
で、失われたファイルがrm
で消されたファイルに当たる。
$ ls foo.c bar.c $ svn status $ rm foo.c $ echo "// comment" > baz.c $ ls bar.c bar.c $ svn status ! foo.c ? baz.c
sed
というわけでまず"!"で始まる行だけseをとりだす、sedスクリプトを書いてみる。
$ svn status ! foo.c ? baz.c $ svn status | sed -n "/^!/p" ! foo.c
次に、"! "を取り除いてやる必要がある。これは、"! foo.c"を"foo.c"で置き換えれば良い。
$ svn status | sed -n '/^!/s/^! *\(.*\)/\1/p' foo.c
ついでにファイル名に空白が含まれていると行けないから、ダブルクオート(")でくくっておく。
$ svn status | sed -n '/^!/s/^! *\(.*\)/"\1"/p' "foo.c"