查找文件中所有非 NUL 字节

查找文件中所有非 NUL 字节

我正在使用 simple 将介质清零pv /dev/zero > ...,想知道在此命令之后介质上是否还有其他字节。这样我就可以知道介质已损坏。我假设理想环境是在此期间任何其他进程都不会写入介质。

我尝试过命令grep -vP '\x00' ...,但在以下两种情况下它都没有给出任何反馈:1. 文件只有 NUL 字节 2. 文件有其他字节。最后我添加了,; echo $?但它总是给出 0。

我遗漏了什么吗?检查的正确命令是什么?

答案1

grep -qP '[^\x00]' ...; echo $?

-q标志告诉 grep 一旦看到非空字节 ( [^\x00]) 就返回 0。否则返回 1。这为正匹配提供了速度优势。

例如,读取 1 亿个随机字节,然后读取 1 亿个零字节:

$ 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

相关内容