From 5a739ab17796c107bc2774e1089fa18b9a504526 Mon Sep 17 00:00:00 2001 From: alf Date: Tue, 29 Sep 2026 07:31:38 +0000 Subject: [PATCH] konsolidieren.sh aktualisiert --- konsolidieren.sh | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/konsolidieren.sh b/konsolidieren.sh index 407d75a..98b1d5e 100644 --- a/konsolidieren.sh +++ b/konsolidieren.sh @@ -28,7 +28,10 @@ LOG_FILE="" # optional: z. B. LOG_FILE=archiv.log setzen log() { local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*" 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] " >&2; exit 1; } @@ -83,7 +86,8 @@ merge_into() { TODAY_MONTH="$(date +%Y-%m)" CLOSED="$(last_closed_month)" -declare -A MONTH_FOLDERS=() +# abgeschlossene Monate ermitteln, deren Tagesordner existieren +declare -A SEEN=() for d in "$ARCHIVE"/*; do [ -d "$d" ] || continue base="$(basename "$d")" @@ -93,13 +97,20 @@ for d in "$ARCHIVE"/*; do if [[ "$month" > "$CLOSED" ]]; then continue # aktueller Monat / Zukunft: nicht anfassen fi - MONTH_FOLDERS["$month"]+="$d"$'\n' + SEEN["$month"]=1 done # pro Monat: aelteste zuerst mergen, neueste gewinnt -for month in "${!MONTH_FOLDERS[@]}"; do - mapfile -t sources < <(sort <<< "${MONTH_FOLDERS[$month]}" | grep -v '^$') +for month in "${!SEEN[@]}"; do 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 # Monatsordner existiert schon (Rest vom letzten Lauf?) -> einfach dazumergen merge_into "$dest" "${sources[@]}"