diff --git a/Meta/write-only-on-difference.sh b/Meta/write-only-on-difference.sh new file mode 100755 index 00000000000..a6485e79a9e --- /dev/null +++ b/Meta/write-only-on-difference.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +set -e + +if [ "$#" -lt "2" ]; then + echo "USAGE: $0 " + exit 1 +fi + +DST_FILE="$1" +shift + +# Just in case: +mkdir -p -- "$(dirname -- "${DST_FILE}")" + +cleanup() +{ + rm -f -- "${DST_FILE}.tmp" +} +trap cleanup 0 1 2 3 6 + +"$@" > "${DST_FILE}.tmp" +# If we get here, the command was successful, and we can overwrite the destination. + +if ! cmp --quiet -- "${DST_FILE}.tmp" "${DST_FILE}"; then + # File changed, need to overwrite: + mv -f -- "${DST_FILE}.tmp" "${DST_FILE}" +fi