#!/bin/bash
#
# mkbak
# Lege von allen Dateien im aktuellen Verzeichnis Backups an
# (auch für hidden Files .*, aber nicht für Files mit Namen *.bak oder *.old)
# Das Backup bekommt denselben Namen mit .bak hinten dran
#
# Wenn es schon ein Backup gibt:
# Mach nur dann ein neues Backup, wenn der File *jünger* als sein Backup ist
# Benenne in diesem Fall das bestehende Backup auf .old um

for file in * .*
do
    # alles überspringen, was kein File ist
    if [ ! -f "$file" ]
    then continue
    fi
# case ist nicht Stoff, aber es gibt hier nur viel kompliziertere Alternativen
# z.B. spezielle bash Variable Substitutions
    # backup-Files überspringen
    case "$file" in
        *.bak | *.old )
            continue ;;
    esac
    if [ -f "$file".bak ]
    then
        # es gibt schon ein Backup, Filedatum vergleichen
        if [ "$file" -nt "$file".bak ]
        then
            mv "$file".bak "$file".old
            # -a ... die Kopie erbt "alles": Die Rechte, die Timestamps, ...
            cp -a "$file" "$file".bak
        # else ignoriere den File
        fi
    else
        cp -a "$file" "$file".bak
    fi
done
