Shell 脚本查找并统计所有文件中的字符总数

Shell 脚本查找并统计所有文件中的字符总数

如何制作一个脚本来查找主目录中不到 3 天的每个文件,然后获取所有这些文件中的字符总数?

答案1

find,catwc:

find ~ -type f -mtime -3 -exec cat {} + | wc -c
  • -mtime检查修改时间。根据您的操作系统和文件系统,创建时间并不容易获得。修改时间是一个合理的折衷方案。-3表示少于 3 天(与 相对+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

相关内容