Найдите все non-NUL байты в файле

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

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

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

0
задан 16 August 2018 в 05:59

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
1
ответ дан 28 October 2019 в 03:40

Другие вопросы по тегам:

Похожие вопросы: