diff --git a/backupf.sh b/backupf.sh new file mode 100755 index 0000000..8bf925d --- /dev/null +++ b/backupf.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# vms_cp.sh — copy file with VMS-style version suffix (:1, :2, ...) +# Usage: ./vms_cp.sh + +set -e + +if [ $# -ne 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +src="$1" +if [ ! -f "$src" ]; then + echo "Error: '$src' not found or not a regular file." + exit 1 +fi + +dir=$(dirname "$src") +base=$(basename "$src") + +# Escape regex special chars for grep +base_escaped=$(printf '%s\n' "$base" | sed 's/[][\.*^$(){}?+|/]/\\&/g') + +# Collect existing version numbers (files like name:1, name:2, etc.) +versions=() +while IFS= read -r f; do + [[ $f =~ :([0-9]+)$ ]] && versions+=("${BASH_REMATCH[1]}") +done < <(ls "$dir" 2>/dev/null | grep -E "^${base_escaped}:[0-9]+$" || true) + +# Determine next version number +if [ ${#versions[@]} -eq 0 ]; then + next_ver=1 +else + max_ver=$(printf "%s\n" "${versions[@]}" | sort -n | tail -1) + next_ver=$((max_ver + 1)) +fi + +dest="${src}:${next_ver}" +cp -p -- "$src" "$dest" + +echo "Created backup: $dest" +