iz_been Asked: 2021-01-01 14:23:18 +0800 CST2021-01-01 14:23:18 +0800 CST 2021-01-01 14:23:18 +0800 CST 如何在 Linux 上从文件名校验文件 772 我在 Windows 机器上的文件名上有许多用 CRC 校验和标记的文件。例子: filename_[000000].extension 我知道基于 Linux 的系统有很多选项可以检查/计算 CRC 校验和,但我不知道有任何方法可以计算文件的校验和,然后通过重命名文件或通过比较验证校验和来“标记”该校验和带有文件名校验和的计算结果。 是否有某种终端命令可以复制这种校验和验证? linux checksum 2 个回答 Voted Best Answer bitinerant 2021-01-01T15:18:29+08:002021-01-01T15:18:29+08:00 您可以结合良好的“单一用途”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 davidgo 2021-01-01T15:15:47+08:002021-01-01T15:15:47+08:00 linux 命令行是非常模块化的,我可以想到很多方法来做到这一点。除非您运行脚本,否则它可能不是您可以优雅地作为单个命令解决方案执行的操作,但逻辑很简单 - 执行校验和,然后重命名文件,附加校验和。我注意到我使用了 sha512 和,但您可以执行大多数其他类型的校验和,包括可能更短的 md5。 我想出了一个唯一的 1-liner,如下所示: mv test.file test-\[`sha512sum test.file| cut -f1 -d" "`\].file 为了使这更通用,在命令行上会很混乱,但使用脚本相当容易 - 您可以使用脚本将文件拆分为扩展之前和之后的部分。 验证输出将取决于重命名文件的确切格式,并且由于文件名的格式,这可能需要脚本来执行此操作。 以编程方式检查结果是可能的,但要复杂得多,因为这将是一个非常复杂的 1-liner。 这是一个脚本,它将验证使用上述 1 行创建的文件 #! /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
您可以结合良好的“单一用途”Linux 工具来执行此操作。通过“CRC”,我假设您的意思是 CRC32。
要将校验和添加到每个文件:
要验证正确的校验和:
对于已标记的每个文件,
crc32
将在文件名之后显示OK
或(例如)BAD 93ed200a != 299f65cb
。如果您没有 crc32 二进制文件:
linux 命令行是非常模块化的,我可以想到很多方法来做到这一点。除非您运行脚本,否则它可能不是您可以优雅地作为单个命令解决方案执行的操作,但逻辑很简单 - 执行校验和,然后重命名文件,附加校验和。我注意到我使用了 sha512 和,但您可以执行大多数其他类型的校验和,包括可能更短的 md5。
我想出了一个唯一的 1-liner,如下所示:
为了使这更通用,在命令行上会很混乱,但使用脚本相当容易 - 您可以使用脚本将文件拆分为扩展之前和之后的部分。
验证输出将取决于重命名文件的确切格式,并且由于文件名的格式,这可能需要脚本来执行此操作。
以编程方式检查结果是可能的,但要复杂得多,因为这将是一个非常复杂的 1-liner。
这是一个脚本,它将验证使用上述 1 行创建的文件