Bash 在fsarchiver备份后查找填充为零的文件

Bash 在fsarchiver备份后查找填充为零的文件,bash,filesystems,Bash,Filesystems,我的SSD快死掉了,所以我尝试用备份我的/home,但在备份过程中我遇到了一系列错误,如:文件被截断:用零填充。 现在我正试图找到这些文件,所以我正在搜索bash/python/perl。。。脚本允许我搜索最后n个字节“填充为零”的非空文件 提前感谢您的帮助,请原谅我的英语。此脚本获取命令行上的文件列表,并报告最后十个字节用零填充的文件的名称: #!/bin/sh for fname in "$@" do if [ -s "$fname" -a "$(tail -c10 "$fname"

我的SSD快死掉了,所以我尝试用备份我的/home,但在备份过程中我遇到了一系列错误,如:
文件被截断:用零填充。

现在我正试图找到这些文件,所以我正在搜索bash/python/perl。。。脚本允许我搜索最后n个字节“填充为零”的非空文件


提前感谢您的帮助,请原谅我的英语。

此脚本获取命令行上的文件列表,并报告最后十个字节用零填充的文件的名称:

#!/bin/sh
for fname in "$@"
do
    if [ -s "$fname" -a "$(tail -c10 "$fname"  | tr -d '\000' | wc -c)" -eq 0 ]
    then
        echo Truncated file: $fname
    fi
done  
它首先检查文件是否为非空(
[-s“$fname”]
),然后获取文件的最后十个字节(
tail-c10“$fname”
)并删除任何字节(
tr-d'\000'
),然后计算剩余的字节数(
wc-c
)。如果最后十个字节都是零,那么就没有剩余的字节了,文件被报告为截断

如果您想在测试中使用10个字节以外的内容,请调整
tail
选项以适应需要

如果测试某个目录或文件系统中的所有文件,
find
可以提供帮助。如果上述脚本位于可执行文件padded.sh中,则运行:

find path/to/suspect/files -size +10c -exec padded.sh {} +

如果您有一个被截断的文件,请使用
od-c filename
,单击上面的
edit
链接后,使用
{}
工具将输出的最后几行粘贴到此处。现在,我们无法确定用零填充是指零值字节,还是ascii“0”字符。祝你好运