我有一个 shell 脚本,用于find -print0
将要处理的文件列表保存到临时文件中。作为日志记录的一部分,我想输出找到的文件数量,因此我需要一种方法来获取该数量。如果该-print0
选项没有被用于安全起见,我可以用来wc -l
获取计数。
答案1
一些选项:
tr -cd '\0' | wc -c
tr '\n\0' '\0\n' | wc -l # Generic approach for processing NUL-terminated
# records with line-based utilities (that support
# NUL characters in their lines like GNU ones).
grep -cz '^' # GNU grep
sed -nz '$=' # recent GNU sed, no output for empty input
awk -v RS='\0' 'END{print NR}' # not all awk implementations
请注意,对于在最后一个 NUL 字符之后包含数据的输入(或没有 NUL 字符的非空输入),这些tr
方法将始终计算 NUL 字符的数量,但awk
//sed
方法grep
将为这些额外字节计算额外的记录。
答案2
我能想到的最好的方法是使用grep -zc '.*'
.这是可行的,但是使用 grep 和匹配任何内容的模式感觉是错误的。
答案3
和perl
:
perl -0ne 'END {print $.}'
或者:
perl -nle 'print scalar split "\0"'
或者:
perl -nle 'print scalar unpack "(Z*)*", $_'