![パターンに一致するファイルの行数の計算 [閉じる]](https://linux33.com/image/199160/%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AB%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%A1%8C%E6%95%B0%E3%81%AE%E8%A8%88%E7%AE%97%20%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
特定のパターンに一致するファイルを与えることができるリストにしたいと思います。これまで、私はあなたが望むパターンに一致するファイルをリストする次のことを試しました。
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.csv
と2021.12.02/myfilepattern.csv
。
この柱の配置に関する特別な要件はありません。開始または終了のいずれかです。
答え1
-printf
AND-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
-ls
wc
find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \
-exec wc -l {} \; \
-ls |
paste - -
出力からファイルパス名を取得したくない場合は、ユーティリティのコマンドラインにファイルを渡すのではなく、ファイルにリダイレクトする必要がありますwc
。 inを使用してこれを行うには、wc
シェルを呼び出す必要があります。-exec
find
find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \
-exec sh -c 'wc -l <"$1"' sh {} \; \
-ls |
paste - -
出力端の行数を取得するには、および-exec
周囲の内容を置き換えます。-ls
-ls