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

时间:2013-12-31 19:33:12

标签: bash filesystems

我的SSD已经死了,所以我尝试使用fsarchiver备份我的/ home,但在此过程中我遇到了一堆错误:file has been truncated: padding with zeros.

现在我正在尝试找到这些文件,所以我正在寻找一个bash / python / perl ...脚本,允许我搜索非空文件,最后n个字节'用零填充'。

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

1 个答案:

答案 0 :(得分:0)

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

#!/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 {} +