Найти все ненулевые байты в файле
Я обнуляю СМИ простым 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