konsolidieren.sh aktualisiert

This commit is contained in:
alf
2026-09-29 07:31:38 +00:00
parent f2bbc94949
commit 5a739ab177

View File

@ -28,7 +28,10 @@ LOG_FILE="" # optional: z. B. LOG_FILE=archiv.log setzen
log() { log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*" local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" echo "$msg"
[ -n "$LOG_FILE" ] && echo "$msg" >> "$LOG_FILE" if [ -n "$LOG_FILE" ]; then
echo "$msg" >> "$LOG_FILE"
fi
return 0
} }
usage() { echo "Usage: $0 [-n] <archiv-verzeichnis>" >&2; exit 1; } usage() { echo "Usage: $0 [-n] <archiv-verzeichnis>" >&2; exit 1; }
@ -83,7 +86,8 @@ merge_into() {
TODAY_MONTH="$(date +%Y-%m)" TODAY_MONTH="$(date +%Y-%m)"
CLOSED="$(last_closed_month)" CLOSED="$(last_closed_month)"
declare -A MONTH_FOLDERS=() # abgeschlossene Monate ermitteln, deren Tagesordner existieren
declare -A SEEN=()
for d in "$ARCHIVE"/*; do for d in "$ARCHIVE"/*; do
[ -d "$d" ] || continue [ -d "$d" ] || continue
base="$(basename "$d")" base="$(basename "$d")"
@ -93,13 +97,20 @@ for d in "$ARCHIVE"/*; do
if [[ "$month" > "$CLOSED" ]]; then if [[ "$month" > "$CLOSED" ]]; then
continue # aktueller Monat / Zukunft: nicht anfassen continue # aktueller Monat / Zukunft: nicht anfassen
fi fi
MONTH_FOLDERS["$month"]+="$d"$'\n' SEEN["$month"]=1
done done
# pro Monat: aelteste zuerst mergen, neueste gewinnt # pro Monat: aelteste zuerst mergen, neueste gewinnt
for month in "${!MONTH_FOLDERS[@]}"; do for month in "${!SEEN[@]}"; do
mapfile -t sources < <(sort <<< "${MONTH_FOLDERS[$month]}" | grep -v '^$')
dest="$ARCHIVE/$month" dest="$ARCHIVE/$month"
# Tagesordner dieses Monats per Glob einsammeln (Glob liefert sie sortiert)
sources=()
for d in "$ARCHIVE/$month"-*; do
[ -d "$d" ] || continue
[[ "$(basename "$d")" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{2}$ ]] || continue
sources+=("$d")
done
[ ${#sources[@]} -gt 0 ] || continue
if [ -e "$dest" ]; then if [ -e "$dest" ]; then
# Monatsordner existiert schon (Rest vom letzten Lauf?) -> einfach dazumergen # Monatsordner existiert schon (Rest vom letzten Lauf?) -> einfach dazumergen
merge_into "$dest" "${sources[@]}" merge_into "$dest" "${sources[@]}"