summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/ifnew33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/ifnew b/src/ifnew
new file mode 100755
index 0000000..c293f63
--- /dev/null
+++ b/src/ifnew
@@ -0,0 +1,33 @@
+#!/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.$(uuid).tmp"
+trap 'rm -f "$STDIN"' EXIT
+
+cat - > "$STDIN"
+cmp -s "$STDIN" "$FILE" || mv $MV_ARGS "$STDIN" "$FILE"