konsolidieren.sh aktualisiert
This commit is contained in:
@ -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[@]}"
|
||||
|
||||
Reference in New Issue
Block a user