如何查找具有零字节长链的文件?

时间:2016-02-02 20:23:09

标签: linux bash

如何找到因磁盘故障而具有连续0(零字节 - 0x00)长链的文件?例如,如何查找序列中超过10000个零字节的文件?

当然,我可以使用Java或其他编程语言编写程序,但有没有办法使用或多或少的标准Linux命令行工具?

更新

您可以使用dd if=/dev/zero of=zeros bs=1 count=100000生成测试文件。

3 个答案:

答案 0 :(得分:2)

这可能是一个开始:

find /some/starting/point -type f -size +10000 -exec \
    perl -nE 'if (/\x0{10000}/) {say $ARGV; close ARGV}' '{}' +

答案 1 :(得分:1)

测试单个文件,名为 filename

if tr -sc '\0' '\n' < filename | tr '\0' Z | grep -qE 'Z{1000}'; then
    # ...
fi

您现在可以使用合适的find命令过滤相关文件进行测试。

例如,*.txt中的所有PWD个文件:

while read -rd '' filename;do
        if tr -sc '\0' '\n' < "$filename" | tr '\0' Z | grep -qE 'Z{1000}'; then
            # For example, simply print "$filename"
            printf '%s\n' "$filename"
        fi
done < <(find . -type f -name '*.txt' -print0)

答案 2 :(得分:-1)

查找和grep应该可以正常工作:

grep -E "(\0)\1{1000}" <file name>  

如果它是同一个目录中的单个文件或一组文件

如果你想在整个系统中搜索:

find /dir/ -exec grep -E "(\0)\1{1000}" {} \; 2> /dev/null

这是非常缓慢的,如果你正在寻找更快的东西,并且可以没有千(或大量)的零 我建议用'grep 000000000 *'代替

替换grep