現在位置から下のソース(*.cと*.h)の行数を全部足して、全部で何行あるか出力する。
$ cd /usr/src/linux-source-2.6.26 $ find ./ \( -name \*.c -o -name \*.h \) -exec wc -l {} \; | perl -ne '$i+=$_; END{print "$i\n"}' 8352072
自分用メモ
find
\*.c:* を展開させず文字列としてfindに直接渡す用。"*.c"でも可。
-o:論理和。このオプションを使うときは必ず\( \)で括る。括らないとどこで意味が途切れるかわからないので緊張する。
-exec:-exec hoge {} \; とにかく毎回忘れるのでメモ。
perl
-e:引数にプログラムを書ける。プログラムはなるべく' 'の方で括るようにする。" "で括るとエスケープとかいろいろ考えるのが面倒くさい。
-n:while(<>){ }が外側にあるフリをする。出力をつけたかったら代わりに-pの方を使う
END{ }:プログラムの最後に何かする。最初に何かするなら BEGIN{ }
wc
-l:そもそも、wc -lにまるっと食わせれば行数は出せた。プログラムなんて書く必要も無い。しかも何十倍も速い。
$ find -name "*.c" -o -name "*.h" | xargs cat | wc -l
参考にさせていただいたページ
Perl第4回:PerlTips(コマンドラインオプション) ←今はもう無い