パターンに一致するファイルの行数の計算 [閉じる]

パターンに一致するファイルの行数の計算 [閉じる]

特定のパターンに一致するファイルを与えることができるリストにしたいと思います。これまで、私はあなたが望むパターンに一致するファイルをリストする次のことを試しました。

find 2021.12.*/ -maxdepth 2 -name "myfilepattern.csv" -ls

123456789  32116 -rw-rw-r--   1 user1 user1 32881884 Dec  1 23:59 2021.12.01/myfilepattern.csv
234567891      4 -rw-rw-r--   1 user1 user1      144 Dec  2 00:00 2021.12.02/myfilepattern.csv

各ファイルの行数2021.12.01/myfilepattern.csv2021.12.02/myfilepattern.csv

この柱の配置に関する特別な要件はありません。開始または終了のいずれかです。

答え1

-printfAND-exec演算子を使用してwc -l行/行数を計算できます。

find 2021.12.*/ -maxdepth 2 -name "myfilepattern.csv" -printf '%i\t%k\t%M\t%n\t%u\t%g\t%s\t%Tb %Td %TH:%TM\t' -exec wc -l {} \;

行番号は最後の列の2番目になります。

答え2

おそらく簡単なアプローチは、各ファイルを呼び出しwc -lてその出力を述語の出力と組み合わせることです-ls。次の使用はこれを行い、使用前に呼び出されるので、paste出力は最初の列に表示されます。wc-lswc

find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \
    -exec wc -l {} \; \
    -ls |
paste - -

出力からファイルパス名を取得したくない場合は、ユーティリティのコマンドラインにファイルを渡すのではなく、ファイルにリダイレクトする必要がありますwc。 inを使用してこれを行うには、wcシェルを呼び出す必要があります。-execfind

find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \
    -exec sh -c 'wc -l <"$1"' sh {} \; \
    -ls |
paste - -

出力端の行数を取得するには、および-exec周囲の内容を置き換えます。-ls-ls

関連情報