모든 파일의 총 문자 수를 찾고 계산하는 쉘 스크립트

모든 파일의 총 문자 수를 찾고 계산하는 쉘 스크립트

내 홈 디렉토리에서 3일 미만의 모든 파일을 찾은 다음 해당 파일의 총 문자 수를 가져오는 스크립트를 어떻게 만들 수 있습니까?

답변1

그리고find,cat그리고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

관련 정보