Count nul разделили элементы в файле

У меня есть сценарий оболочки, который использует find -print0 для сохранения списка файлов, которые будут обработаны во временный файл. В рамках ведения журнала я хотел бы указать количество найденных файлов, и поэтому мне нужен способ получить этот счет. Если опция -print0 не использовалась для обеспечения безопасности, я мог бы использовать wc -l для получения счета.

Некоторые варианты:

 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 -vRS='\0' 'END{print NR}' # not all awk implementations 

Обратите внимание, что для ввода, содержащего данные после последнего символа NUL (или непустого ввода без символов NUL), tr подходы всегда будут подсчитывать количество символов NUL, но подходы awk / sed / grep будут считать дополнительную запись для этих дополнительных байтов.

Лучший способ, о котором я мог думать, – использовать grep -zc '.*' . Это работает, но неправильно использовать grep с шаблоном, который будет соответствовать чему угодно.

С perl :

 perl -0ne 'END {print $.}' 

или:

 perl -nle 'print scalar split "\0"' 

или:

 perl -nle 'print scalar unpack "(Z*)*", $_'