#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: ifnew [-v] FILE EOF } MV_ARGS='' while getopts 'v' flag; do case "$flag" in (v) MV_ARGS='-v' ;; (*) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) FILE="${1:-}" eval "$(assert-arg -- "$FILE" 'FILE')" STDIN="$FILE.$(uuidx).tmp" trap 'rm -f "$STDIN"' EXIT cat - > "$STDIN" cmp -s "$STDIN" "$FILE" || mv $MV_ARGS "$STDIN" "$FILE"