#!/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"