ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

find -exec で bash を呼び出す

内容までチェックするような、凝ったファイル検査をしたいときに、-exec 節を使いたい。 そういうときは bash の引数として _{} を渡せばよいようだ。 _$0 に埋め込ませるだけである。

$ touch empty.txt
$ seq 10 > num1.txt
$ seq 4 > num2.txt
$ find . -type f -exec bash -c \ 
   'test $({ echo 0; cat "$1"; } | paste -sd+ - | bc) -eq 10' _ {} \; \
    -print
./num2.txt

serverfault.com

SVN 作業コピーのダイエットをした

プロジェクトの作業コピーの中にはもう使わないものも含まれている。 そういうファイルが何年も溜まってくると更新するだけでもディスク待ちが発生してしまう。

svn delete すればいいんだろうけど、プロジェクト的にはそういう感じでもないので、作業コピーに絞ってダイエットをするスクリプトを書いた。「もう使わない」の定義はリビジョン番号で決めた。

$ find path/to/many/files -mindepth 1 -maxdepth 1 -type d
 | xargs -n1 -I% bash -c 'REV=$(LC_ALL=en_US.UTF8 svn info %
                                          | grep -F "Last Changed Rev"
                                          | grep -o "[0-9]*");
                                      test "${REV}" -lt 100000 && echo %'
 | xargs -n1 -I% bash -c 'svn update % --set-depth exclude %; sleep 3'

find-exec 内でリビジョンチェックをするつもりがうまくいかなかったので次の xargs でチェックしている。