すべてのファイルの総文字数を見つけて計算するシェルスクリプト

すべてのファイルの総文字数を見つけて計算するシェルスクリプト

私のホームディレクトリで3日未満のすべてのファイルを見つけて、そのファイルの総文字数を取得するスクリプトをどのように作成できますか?

答え1

そしてfindcatそしてwc:

find ~ -type f -mtime -3 -exec cat {} + | wc -c
  • -mtime修正時間を確認してください。オペレーティングシステムとファイルシステムによっては、作成時間を簡単に確認できません。修正時間は合理的な妥協案です。-33日未満を示します(と反対+3)。実際には72時間です。
  • -type f- 一般的なファイルに制限してください。
  • -exec cat {} +-cat一致する各ファイルを呼び出します。
  • wc -c:印刷する文字数。すべての s の結合出力があるので、catこれが合計です。

答え2

これはとても簡単です。

find ~/ -mtime -3 -exec cat {} + | wc -c

上記の転送は各ファイルのすべての文字を計算しますwc

ファイルが大きい場合、上記の操作にはディスクから読み取る操作がたくさん含まれます。単にファイルのサイズだけを追加すると、より効率的になります。ファイルサイズの取得方法はUnixのバージョンによって異なります。ただし、システムがLinuxスタイルのstatコマンドをサポートしている場合は、次のことが機能します。

find . -mtime -3 -type f -exec stat -c%s {} + | awk '{total+=$1} END{print total}'

上記では、stat -c%s各ファイルのサイズを返し、awk一緒に追加して合計を報告します。これにより、各ファイルを完全に読み取る必要がなくなります。

答え3

この試み

find ./ -type f -mtime -3 -exec wc -c {} \; | perl -lane 'BEGIN {$total=0}; $total+=$F[0]; END {print $total}'

はい

❮njia@mb-125:~/src/ansible/roles❯➤ find ./ -type f -mtime -3 -exec wc -c {} \;
12288 ./base/tasks/.check_glibc.yml.swp
185 ./base/tasks/check_glibc.yml
❮njia@mb-125:~/src/ansible/roles❯➤ find ./ -type f -mtime -3 -exec wc -c {} \; |    perl -lane 'BEGIN {$total=0}; $total+=$F[0]; END {print $total}'
12473

関連情報