useful_linux_scripts/backupf.sh

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"