見つかったファイルの合計行数をカウントする方法は?


10

私はa find . -name patternを実行していくつかのファイルを見つけましたが、これらのファイルの合計行数をエレガントに取得したいと思います。

どうすればそれを達成できますか?

回答:


9

ご使用のバージョンが必要なオプションwcfindサポートしている場合:

find . -name pattern -print0 | wc -l --files0-from=-

これにより、ファイルごとのカウントと合計が得られます。合計のみが必要な場合:

find . -name pattern -print0 | wc -l --files0-from=- | tail -n 1

findそれをサポートするバージョンの別のオプション:

find . -name pattern -exec cat {} + | wc -l 

2
$ find . -name '*.txt' -exec cat '{}' \; | wc -l

各ファイルを取得してcatsにし、すべてのwcセットを行カウントモードにパイプで渡します。

または、[テストされていない]奇妙なファイル名セーフ:

$ find . -name '*.txt' -print0 | xargs -0 cat | wc -l

1

残念ながらの出力:

find . -iname "yourpattern" -exec cat '{}' \; |wc -l

余分な行を挿入します。信頼できる行数を取得するには、次を実行する必要があります。

find . -name "yourpattern" -print0 | xargs -0 wc -l

このようにして、スペースを正しく処理し、各ファイルの行数と合計行数をより高速かつスタイリッシュに取得します!!!


1
例:時間検索。-name " .m" -exec cat '{}' \; | wc -lは4.878sで実行され、行数として227847を返します。しかし、時間を見つける。-name " .m" -print0 | xargs -0 wc -lは0.769秒で実行され、適切な行カウント126464を返します。
g24l

1

いいえを見つける別の簡単な方法。ファイル内の行:

wc -l filename

例:

wc -l myfile.txt 


-2
wc -l `find -name filename`

効率的に動作します。


…または、グロビングをトリガーするスペースまたは文字がパスに含まれている場合。
カミル・マチオロフスキー

それが動作してもそして、これは行数報告では、各ファイル、(要求された通り)の合計を取得するためのエレガントな方法ではありません。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.