web-dev-qa-db-ja.com

すべてのサブディレクトリでwcを使用して、行の合計をカウントします

すべてのサブディレクトリ内のすべてのファイルのすべての行をwcでカウントするにはどうすればよいですか?

cd mydir
wc -l *
..
11723 total

man wcwc -l --files0-from=-を提案しますが、すべてのファイルのリストをNUL-terminated namesとして生成する方法がわかりません

find . -print | wc -l --files0-from=-

動作しませんでした。

39
Jonas Stein

おそらくこれが必要です:

find . -type f -print0 | wc -l --files0-from=-

行の総数だけが必要な場合は、次を使用できます。

find . -type f -exec cat {} + | wc -l
78
gniourf_gniourf

おそらく、execfindオプションを探しています。

find . -type f -exec wc -l {} \; | awk '{total += $1} END {print total}'

Uが使用できる特定のファイル拡張子のすべての行をカウントするには、

find . -name '*.fileextension' | xargs wc -l

あなたが2つ以上の異なるタイプのファイルでそれを望むなら、uは-oオプションを置くことができます

find . -name '*.fileextension1' -o -name '*.fileextension2' | xargs wc -l
4
Ankur

別のオプションは、再帰grepを使用することです。

grep -hRc '' . | awk '{k+=$1}END{print k}'

Awkは単に数字を追加します。使用されるgrepオプションは次のとおりです。

   -c, --count
          Suppress normal output; instead print a count of matching  lines
          for  each  input  file.  With the -v, --invert-match option (see
          below), count non-matching lines.  (-c is specified by POSIX.)
   -h, --no-filename
          Suppress the prefixing of file names on  output.   This  is  the
          default  when there is only one file (or only standard input) to
          search.
   -R, --dereference-recursive
          Read all files under each directory,  recursively.   Follow  all
          symbolic links, unlike -r.

したがって、grepは、何かに一致する行数( '')をカウントするため、基本的には行数のみをカウントします。

4
terdon

私は次のようなものを提案します

find ./ -type f | xargs wc -l | cut -c 1-8 | awk '{total += $1} END {print total}'
0
sge