すべてのサブディレクトリ内のすべてのファイルのすべての行をwc
でカウントするにはどうすればよいですか?
cd mydir
wc -l *
..
11723 total
man wc
はwc -l --files0-from=-
を提案しますが、すべてのファイルのリストをNUL-terminated names
として生成する方法がわかりません
find . -print | wc -l --files0-from=-
動作しませんでした。
おそらくこれが必要です:
find . -type f -print0 | wc -l --files0-from=-
行の総数だけが必要な場合は、次を使用できます。
find . -type f -exec cat {} + | wc -l
おそらく、exec
のfind
オプションを探しています。
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
別のオプションは、再帰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
は、何かに一致する行数( '')をカウントするため、基本的には行数のみをカウントします。
私は次のようなものを提案します
find ./ -type f | xargs wc -l | cut -c 1-8 | awk '{total += $1} END {print total}'