Bashで次のようにハッシュ値を比較する。
function check_sha256sum() {
file1sum=$(sha256sum "$1" | awk '{print $1}')
file2sum=$(sha256sum "$2" | awk '{print $1}')
[[ $file1sum == "$file2sum" ]]
}
これを次のように使える。
if check_sha256sum $filename1 $filename2; then
echo match hash sum of $filename1 and $filename2
fi
もしくは
if ! check_sha256sum $filename1 $filename2; then
echo not match hash sum of $filename1 and $filename2
fi
以下おまけ
find "${SSTATE_CACHE_SRC}" -mindepth 2 -name "*.siginfo" -type f | while read -r siginfo_file; do
sstate_file=${siginfo_file%.siginfo}
if [[ ! -f $sstate_file ]]; then
continue
fi
sstate_rel=$(realpath --relative-to="$SSTATE_DIR" "$sstate_file")
if [[ ! -f "$SSTATE_CACHE_DEST/$sstate_rel" || ! -f "$SSTATE_CACHE_DEST/$sstate_rel.siginfo" ]]; then
mkdir -p "$SSTATE_CACHE_DEST/${sstate_rel%/*}"
echo "copying $(basename "$sstate_file")"
cp "$SSTATE_CACHE_SRC/$sstate_rel" "$SSTATE_CACHE_DEST/$sstate_rel"
cp "$SSTATE_CACHE_SRC/$sstate_rel.siginfo" "$SSTATE_CACHE_DEST/$sstate_rel.siginfo"
fi
if [[ $* =~ --clean ]]; then
if check_sha256sum "$SSTATE_CACHE_SRC/$sstate_rel" "$SSTATE_CACHE_DEST/$sstate_rel"; then
rm -f "$SSTATE_CACHE_SRC/$sstate_rel"
rm -f "$SSTATE_CACHE_SRC/$sstate_rel.siginfo"
fi
fi
done | head -n10
この使い方は
SSTATE_CACHE_SRC="path/to/somewhere"
SSTATE_CACHE_DEST="path/to/somewhere/else"
SSTATE_CACHE_SRC=${SSTATE_CACHE_SRC%/}
SSTATE_CACHE_DEST=${SSTATE_CACHE_DEST%/}
もしくは外部から
SSTATE_CACHE_SRC="path/to/somewhere" \
SSTATE_CACHE_DEST="path/to/somewhere/else" \
./this_script.sh
として実行する。