У меня есть сценарий оболочки, который используется find -print0
для сохранения списка файлов для обработки во временный файл. Как часть журнала я хотел бы вывести количество найденных файлов, и поэтому мне нужен способ получить это количество. Если бы эта -print0
опция не использовалась для безопасности, я мог бы использовать ее wc -l
для подсчета.
shell-script
qqx
источник
источник
head
иtail
на вводе с нулем в bash?Ответы:
Некоторые варианты:
Обратите внимание, что для ввода, который содержит данные после последнего символа NUL (или непустого ввода без символов NUL),
tr
подходы всегда будут подсчитывать количество символов NUL, но подходыawk
/sed
/grep
будут считать дополнительную запись для этих дополнительных байтов. ,источник
head -c 5G /dev/urandom > f
). Результаты: grep 1.7s (тоже самоеgrep -Fcz ''
) • tr + wc-c 7.7s • tr + wc-l 7.4s • sed 34.7s • awk 1m11.7sawk
вы захотите установить языковой стандартC
(или любой, в котором не используются многобайтовые символы),LC_ALL=C awk ... < f
LC_ALL=C
наsort
котором он не скорость вещи, поэтому К счастью , я до сих пор есть файл с раньше:LC_ALL=C awk ...
принимает 6.7s.Лучший метод, который я смог придумать - это использовать
grep -zc '.*'
. Это работает, но неправильно использовать grep с шаблоном, который будет соответствовать чему угодно.источник
С
perl
:или:
или:
источник
wc -l
) запиской (как это может быть необходимо).