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() {
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] <archiv-verzeichnis>" >&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[@]}"