43 lines
972 B
Bash
Executable File
43 lines
972 B
Bash
Executable File
#!/bin/bash
|
|
# vms_cp.sh — copy file with VMS-style version suffix (:1, :2, ...)
|
|
# Usage: ./vms_cp.sh <filename>
|
|
|
|
set -e
|
|
|
|
if [ $# -ne 1 ]; then
|
|
echo "Usage: $0 <filename>"
|
|
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"
|
|
|