使用 MD5 校验多个文件

使用 MD5 校验多个文件

每个月,一家公司都会给我寄来一块硬盘 - 使用 cryptsetup 加密的 ext4 - 里面有来自服务器的备份文件。该硬盘中有 1000 多个文件,它们几乎填满了 2Tb 的硬盘。每个文件都有一个对应的 .md5 文件,因此我们可以检查它的完整性,但正如您所想象的,我无法在终端中手动检查每一个文件,因此我将它们复制到另一个硬盘并在 Windows 中检查它们。在 Ubuntu 上,有没有办法检查所有文件,甚至只是检查文件夹中的所有文件?谢谢。

答案1

是的,可以。假设每个文件在同一个目录中只有一个 md5 文件,且只附加一个.md5,则创建一个脚本文件(例如md5check.sh),其内容如下:

#!/bin/bash
echo "Building file list..."
$ALLFLS="$(find)"
echo "Checking all files..."
for word in $ALLFLS; do
    if [[ $(cat "$word.md5") == $(md5sum -b "$word") ]]; then
        echo "$word OK"
    else
        echo "MD5 wrong for $word"
        exit
    fi
done
echo "All files correct!"

这将检查每个文件。如果有效,请报告。(请确保在执行脚本之前已将目录更改为硬盘驱动器,并确保您拥有chmod +x它)

编辑:

您还可以查看这一页

答案2

这些信息很难找到,但如果您想根据目录中的各自文件检查所有 md5(例如下载),您只需:

cd Downloads
md5sum -c *.md5

这将输出已检查 OK 或 FAILED 的文件列表

看:https://linux.die.net/man/1/md5sum了解更多信息。

答案3

如果所有文件都位于同一目录中(没有子目录),则可以md5sum -c对每个.md5文件运行。以下操作还会将错误保存到文件中,以便您事后检查。

logerrors="md5errors.log"
for f in *.md5; do
    md5sum -c "$f" 2>> "$logerrors" || echo "ERROR on $f"
done

如果您的 .md5 文件也可以在子目录中找到,则可以使用以下命令:

find . -type f -name "*.md5" \
| while read f; do
    d="$(dirname "$f")"; b="$(basename "$f")"
    ( cd "$d"; md5sum -c "$b" || echo "Error on $f" | tee -a "$logerrors" )
  done

另请参阅man md5sum。特别是,您可能希望使用以下--quiet选项:

不要为每个成功验证的文件打印 OK

相关内容