ディレクトリ以下のJavaソースコードのファイル数と総行数を求めるコマンド

ディレクトリ以下のJavaソースコードのファイル数を求める

MacBookAir:~ ****$ find /Users/****/Desktop/ -name '*.java' | wc -l
12
ディレクトリ以下のJavaソースコードのファイル総行数を求める
MacBookAir:~ ****$ find /Users/****/Desktop/ -name '*.java' | xargs cat | wc -l
360
MacBookAir:~ ****$ wc -l `find /Users/****/Desktop/ -name '*.java'`
360



UNIXコマンドで複雑な処理を行うには、より多くのコマンドを覚えることが必要だと思われがちです。ただ実際に触ってみると分かるのですが、基本コマンドを組み合わせて処理を行うパズルゲームのような感じです。

基本コマンドと言っても、今回の場合だと下の3つは覚えておく必要があります。
cat, find, wc

cat
cat (option) [file name]
ファイルを連結して出力 ※複数ファイル指定可能
■-b : 空行を含めず行番号を出力
■-n : 空行を含めて行番号を出力
■-s : 複数の空行を一つにまとめて出力

find
find [ディレクトリ] (option)
ファイルとディレクトリの検索
■-name [file name] : 指定したファイル・ディレクトリの検索
■-user [user name] : 指定したユーザのファイル・ディレクトリの検索
■-fprint [file name] : 指定したファイルに検索結果を書き出す

wc
wc (option) [file name]
ファイルの行数・単語数・バイト数を表示
■-c : バイト数を表示
■-l : 行数を表示
■-w : 単語数を表示


ディレクトリ以下のファイル数を求めるコマンド
find /Users/****/Desktop/ -name '*.java' | wc -l
findコマンドで指定ディレクトリ以下にあるファイルが出力され、その値をパイプでwcコマンドに渡します。wcコマンドには行数を表示するオプション付いているので、findで出力されたファイル数の数を数える。つまり指定したディレクトリのファイル数を求めることが出来る。

駄目だ、説明むずかしぃ

ディレクトリ以下のファイル総行数を求めるコマンド
find /Users/****/Desktop/ -name '*.java' | xargs cat | wc -l
基本はファイル数を求めるコマンドと同じ。パイプが2本あることから値を2回渡してるんだなと分かれば良い。findコマンドで出力されたファイルの出力をパイプで渡し、xargsコマンドで出力毎にcatコマンドを実行し、ファイルが連結して出力される。その値をwcコマンドで行数を数える。するとファイルの総行数が分かる。

xargsコマンドを使わず、findとwcを使うだけで求めれる方法もあるが、引用府の説明が必要になるので今回は省略。入力方法だけ下に

wc -l `find /Users/****/Desktop/ -name '*.java'`