#!/bin/bash # ... (Ihre KONFIGURATION und logger_init/logger_start sind hier unverändert) ... # --- KONFIGURATION --- # Das Skript benötigt Lesezugriff auf dieses Verzeichnis SOURCE_DIR="/srv/MEDIA/Audio/Radio-Archiv/2025/10" STAGING_DIR="/srv/MEDIA/Audio/ISO/Staging" ISO_OUTPUT_DIR="/srv/MEDIA/Audio/ISO/burn" # Maximale Größe des Staging-Verzeichnisses (DVD-5: 4.7 GB * 1024^3) ISO_LIMIT_BYTES=4939274240  CONFIG_FILE="/root/Gitea/audio_archiver/current_iso.conf" INDEX_FILE="/root/Gitea/audio_archiver/archive_index.csv" LOG_FILE="/root/Gitea/logger/Logs/audio_archiver.log" source /root/Gitea/logger/logger.sh log_init $LOG_FILE log_start # --------------------- # Sicherstellen, dass die Verzeichnisse existieren mkdir -p "$STAGING_DIR" "$ISO_OUTPUT_DIR" $(dirname "$CONFIG_FILE") $(dirname "$INDEX_FILE") # ... (Ihre Funktionen load_config, save_config, next_iso_id sind hier unverändert) ... # Funktion zur Verarbeitung des vollen Staging-Verzeichnisses finalize_iso() {     log_info "--- ISO $CURRENT_ISO_ID erreicht Speichergrenze. Erstelle Image. ---"          local ISO_FILENAME="${ISO_OUTPUT_DIR}/${CURRENT_ISO_ID}.iso"     # Temporäre Datei für die Ausgabe von genisoimage     local GENISO_LOG=$(mktemp)     # 1. ISO-Image erstellen (mit Rock Ridge für lange Dateinamen)     # Die Ausgabe wird in die temporäre Datei umgeleitet     genisoimage -r -J -o "$ISO_FILENAME" "$STAGING_DIR" > "$GENISO_LOG" 2>&1     local EXIT_CODE=$?          # Protokollierung der genisoimage-Ausgabe     log_info "Ausgabe von genisoimage: $(cat $GENISO_LOG | tr '\n' ' ')"     rm -f "$GENISO_LOG" # Temporäre Datei löschen     if [ $EXIT_CODE -eq 0 ]; then         log_info "ISO-Image '$ISO_FILENAME' erfolgreich erstellt."                  # 2. Staging-Verzeichnis leeren         log_info "Leere Staging-Verzeichnis..."         rm -rf "$STAGING_DIR"/*                  # 3. Zur nächsten ISO wechseln und Konfiguration speichern         next_iso_id         save_config     else         log_error "FEHLER ($EXIT_CODE) beim Erstellen des ISO-Images '$ISO_FILENAME'."         exit 1     fi     log_info "------------------------------------------------------------------" } # --- HAUPTPROGRAMM START --- load_config log_info "Archivierung gestartet. Aktuelle ISO: $CURRENT_ISO_ID, Zähler: $CURRENT_FILE_COUNTER" # 1. Alle neuen/unverarbeiteten MP3s finden find "$SOURCE_DIR" -type f -name "*.mp3" | while read -r FILE_PATH; do          # Prüfen, ob Datei bereits im Index ist (verhindert Doppelarchivierung)     if grep -q ";${FILE_PATH}$" "$INDEX_FILE"; then         continue # Datei wurde bereits archiviert, überspringen     fi          # **KORREKTUR 1: Größenprüfung VOR Kopieren mit Dateigröße**     # Die Größe der aktuellen Datei holen     FILE_SIZE=$(stat -c%s "$FILE_PATH")         # Größe des Staging-Verzeichnisses holen     CURRENT_STAGING_SIZE=$(du -bs "$STAGING_DIR" | awk '{print $1}')          # Bei Erreichen der Grenze: Schließe ISO ab und starte neue     # Prüfen, ob die Hinzufügung der aktuellen Datei das Limit überschreiten würde     if [[ $(($CURRENT_STAGING_SIZE + $FILE_SIZE)) -ge "$ISO_LIMIT_BYTES" ]]; then         log_warn "Nächste Datei würde Limit überschreiten. Finalisiere aktuelle ISO: $CURRENT_ISO_ID"         finalize_iso         # Nach finalize_iso sind die neue ISO_ID und der Zähler geladen.         # Die aktuelle Datei ($FILE_PATH) wird in der nächsten Iteration erneut geprüft.         continue     fi          # 3. Metadaten (Tags) auslesen mit exiftool     # Trennzeichen ist TAB (\t)     TAGS=$(exiftool -s3 -T -Artist -Title "$FILE_PATH")     KUENSTLER=$(echo "$TAGS" | awk -F '\t' '{print $1}')     TITEL=$(echo "$TAGS" | awk -F '\t' '{print $2}')     # Sicherstellen, dass Tags vorhanden sind (falls nicht, 'Unknown' verwenden)     [ -z "$KUENSTLER" ] && KUENSTLER="Unknown Artist"     [ -z "$TITEL" ] && TITEL="Unknown Title"     # 4. Eindeutigen Dateinamen generieren und kopieren     NEW_FILENAME=$(printf "%s_%06d.mp3" "$CURRENT_ISO_ID" "$CURRENT_FILE_COUNTER")     log_info "Kopiere $FILE_PATH zu $NEW_FILENAME"     cp "$FILE_PATH" "$STAGING_DIR/$NEW_FILENAME"          if [ $? -eq 0 ]; then         log_info "Archiviert: $NEW_FILENAME"         # 5. Index-Eintrag hinzufügen         echo "$KUENSTLER;$TITEL;$CURRENT_ISO_ID;$CURRENT_FILE_COUNTER;$FILE_PATH" >> "$INDEX_FILE"                  # 6. Zähler erhöhen und Konfiguration speichern         CURRENT_FILE_COUNTER=$((CURRENT_FILE_COUNTER + 1))         save_config     else         log_error "FEHLER beim Kopieren der Datei: $FILE_PATH"     fi done log_info "Archivierung abgeschlossen. $CURRENT_ISO_ID ist aktuell im Staging." # --- HAUPTPROGRAMM ENDE --- log_end