我在 Windows 计算机上有许多文件,文件名上带有 CRC 校验和标记。例如:
filename_[000000].extension
我知道基于 Linux 的系统有很多选项可以检查/计算 CRC 校验和,但我不知道有任何选项可以计算文件的校验和,然后通过重命名文件来“标记”该校验和,或者通过将计算结果与文件名上的校验和进行比较来验证校验和。
是否有某种终端命令可以复制这种校验和验证?
答案1
您可以结合使用优秀的“单一用途”Linux 工具来实现此目的。我假设您所说的“CRC”是指 CRC32。
为每个文件添加校验和:
find . -maxdepth 1 -type f |while read -r FILE; do
mv -i "$FILE" "${FILE%.*}"_[$(crc32 "$FILE")]."${FILE##*.}"
done
验证校验和是否正确:
crc32 *
对于每个已标记的文件,crc32
将在文件名后显示OK
或(例如) 。BAD 93ed200a != 299f65cb
如果你没有 crc32 二进制文件:
sudo apt install libarchive-zip-perl
答案2
Linux 命令行非常模块化,我能想到很多方法来实现这一点。除非你运行脚本,否则你可能无法优雅地将其作为单个命令解决方案来完成,但逻辑很简单 - 执行校验和,然后重命名文件,附加校验和。我注意到我使用了 sha512 校验和,但你可以执行大多数其他类型的校验和,包括可能更短的 md5。
我想出了如下的一条简单方法:
mv test.file test-\[`sha512sum test.file| cut -f1 -d" "`\].file
为了使其更加通用,在命令行上会很混乱,但使用脚本却相当容易 - 您可以使用脚本将文件拆分为扩展名之前和之后的部分。
验证输出将取决于重命名文件的确切格式,并且由于文件名的格式,这可能需要脚本来执行此操作。
通过编程来检查结果是可能的,但是会复杂得多,因为它将是一个非常复杂的一行程序。
下面是一个脚本,它将验证使用上面一行代码创建的文件
#! /bin/bash
if [ $1. == '.' ]
then
echo Usage: $0 filename
fi
FILENAMECHECKSUM=`echo $1 | cut -f2 -d'[' | cut -f1 -d']'`
FILECONTENTCHECKSUM=`sha512sum $1 | cut -f1 -d" "`
if [ $FILENAMECHECKSUM == $FILECONTENTCHECKSUM ]
then
echo "Checksum OK"
else
echo "Checksum mismatch"
fi