每个月,一家公司都会给我寄来一块硬盘 - 使用 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