Найти все ненулевые байты в файле

Я обнуляю СМИ простым pv /dev/zero > ... и хотите узнать, есть ли после этой команды какой-либо другой байт на носителе. Это позволило бы мне знать, что СМИ повреждены. Я предполагаю идеальную среду, которую тем временем ни один другой процесс не будет записывать на носитель.

Я пробовал команду grep -vP '\x00' ... но это не дает никакой обратной связи в обоих случаях: 1. файл имеет только NUL байтов 2. файл имеет другие байты. В конце концов я добавляю ; echo $? но это всегда дает 0.

Я что-то пропустил? Какую команду проверить?

1 ответ

Решение
grep -qP '[^\x00]' ...; echo $?

-q флаг сообщает grep, что нужно вернуть 0, как только он увидит ненулевой байт ([^\x00]). В противном случае возвращается 1. Это дает преимущество в скорости для положительных совпадений.

Например, чтение 100 миллионов случайных байтов, затем 100 миллионов нулевых байтов:

$ time head -c 100000000 /dev/urandom | grep -qP '[^\x00]'; echo $?

real    0m0.007s
user    0m0.000s
sys     0m0.004s
0
$ time head -c 100000000 /dev/zero | grep -qP '[^\x00]'; echo $?

real    0m4.281s
user    0m4.120s
sys     0m0.268s
1
Другие вопросы по тегам