1. ホーム
  2. linux

[解決済み] サブディレクトリを含むコード行数をカウントする方法 [重複]。

2023-03-23 18:24:38

質問

私がプロジェクト内のコードの行数を数えたい場合を考えてみましょう。もしすべてのファイルが同じディレクトリにあれば、私は実行することができます。

cat * | wc -l

しかし、サブディレクトリがある場合、これはうまくいきません。これが動作するためには、catは再帰的なモードを持っている必要があります。これは xargs の仕事かもしれませんが、よりエレガントなソリューションがあるのでしょうか?

どのように解決するのですか?

まず cat を使って行数を数える必要はありません。これは のアンチパターンで、Useless Use of Cat と呼ばれています。 (UUoC)と呼ばれるアンチパターンです。カレントディレクトリにあるファイルの行数を数えるには wc :

wc -l * 

次に find コマンドはサブディレクトリを再帰的に検索します。

find . -name "*.c" -exec wc -l {} \;

  • . は、検索を開始するトップディレクトリの名前です。

  • -name "*.c" は対象のファイルのパターンです。

  • -exec 実行するコマンドを指定する

  • {} はコマンドに渡されるfindコマンドの結果です(ここでは wc-l )

  • \; はコマンドの終わりを示す

このコマンドは、見つかったすべてのファイルとその行数のリストを作成します。 すべての の合計が欲しい場合は、find を使ってファイルをリストアップすることができます ( -print オプションで) ファイルをリストアップし、次に xargs を使ってこのリストを wc-l の引数として渡します。

find . -name "*.c" -print | xargs wc -l 

Robert Gamble のコメントに対応するための編集 (感謝): ファイル名にスペースや改行 (!) が入っている場合は -print0 オプションの代わりに -printxargs -null で、ファイル名のリストがヌル文字で終端する文字列と交換されるようにします。

find . -name "*.c" -print0 | xargs -0 wc -l

Unixの哲学は、一つのことだけを行い、それをうまく行うツールを持つことです。