1行にチェックサムを作成/確認しますか?

1行にチェックサムを作成/確認しますか?

ファイルのチェックサムを生成するときは、正しい形式を指定するためにいくつかの追加作業を実行する必要があります。

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 ...

関連情報