当我为文件生成校验和时,我必须做一些额外的工作才能正确设置它们的格式:
CHECKSUM="$(shasum "$file" | cut -b 1-40)"
echo -n "$CHECKSUM" > "$file.sha"
这是为了确保在文件中,我只有校验和本身(因此cut
),并且在文件末尾没有换行符(因此echo -n
)。
验证校验和还需要一些额外的工作:
CHECKSUM="$(shasum "$file" | cut -b 1-40)"
echo -n "$CHECKSUM" | diff - "$file.sha"
是否有一种更简单、更紧凑的方法来创建和验证校验和而不存储路径?我不喜欢将路径与文件一起存储在校验和中,因为这使得文件在我看来不太可移植。
答案1
一个明显的小改进
CHECKSUM="$(shasum "$file" | cut -b 1-40)"
echo -n "$CHECKSUM" > "$file.sha"
是:
shasum "$file" | cut -b 1-40 >"$file.sha"
cut
可以使用 `awk 避免尾随换行符:
shasum "$file" | awk -v ORS="" '{print $1}'
更简单的形式
CHECKSUM="$(shasum "$file" | cut -b 1-40)"
echo -n "$CHECKSUM" | diff - "$file.sha"
是:
if [ "$(shasum "$file" | cut -b 1-40)" = "$(<"$file.sha")" ]; then ...