audio_archiver.sh aktualisiert
This commit is contained in:
@ -9,7 +9,7 @@ STAGING_DIR="/srv/MEDIA/Audio/ISO/Staging"
|
|||||||
ISO_OUTPUT_DIR="/srv/MEDIA/Audio/ISO/burn"
|
ISO_OUTPUT_DIR="/srv/MEDIA/Audio/ISO/burn"
|
||||||
|
|
||||||
# Maximale Größe des Staging-Verzeichnisses (DVD-5: 4.7 GB * 1024^3)
|
# Maximale Größe des Staging-Verzeichnisses (DVD-5: 4.7 GB * 1024^3)
|
||||||
ISO_LIMIT_BYTES=4939274240
|
ISO_LIMIT_BYTES=4939274240
|
||||||
|
|
||||||
CONFIG_FILE="/root/Gitea/audio_archiver/current_iso.conf"
|
CONFIG_FILE="/root/Gitea/audio_archiver/current_iso.conf"
|
||||||
INDEX_FILE="/root/Gitea/audio_archiver/archive_index.csv"
|
INDEX_FILE="/root/Gitea/audio_archiver/archive_index.csv"
|
||||||
@ -27,36 +27,36 @@ mkdir -p "$STAGING_DIR" "$ISO_OUTPUT_DIR" $(dirname "$CONFIG_FILE") $(dirname "$
|
|||||||
|
|
||||||
# Funktion zur Verarbeitung des vollen Staging-Verzeichnisses
|
# Funktion zur Verarbeitung des vollen Staging-Verzeichnisses
|
||||||
finalize_iso() {
|
finalize_iso() {
|
||||||
log_info "--- ISO $CURRENT_ISO_ID erreicht Speichergrenze. Erstelle Image. ---"
|
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)
|
local ISO_FILENAME="${ISO_OUTPUT_DIR}/${CURRENT_ISO_ID}.iso"
|
||||||
# Die Ausgabe wird in die temporäre Datei umgeleitet
|
# Temporäre Datei für die Ausgabe von genisoimage
|
||||||
genisoimage -r -J -o "$ISO_FILENAME" "$STAGING_DIR" > "$GENISO_LOG" 2>&1
|
local GENISO_LOG=$(mktemp)
|
||||||
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
|
# 1. ISO-Image erstellen (mit Rock Ridge für lange Dateinamen)
|
||||||
log_info "ISO-Image '$ISO_FILENAME' erfolgreich erstellt."
|
# Die Ausgabe wird in die temporäre Datei umgeleitet
|
||||||
|
genisoimage -r -J -o "$ISO_FILENAME" "$STAGING_DIR" > "$GENISO_LOG" 2>&1
|
||||||
# 2. Staging-Verzeichnis leeren
|
local EXIT_CODE=$?
|
||||||
log_info "Leere Staging-Verzeichnis..."
|
|
||||||
rm -rf "$STAGING_DIR"/*
|
# Protokollierung der genisoimage-Ausgabe
|
||||||
|
log_info "Ausgabe von genisoimage: $(cat $GENISO_LOG | tr '\n' ' ')"
|
||||||
# 3. Zur nächsten ISO wechseln und Konfiguration speichern
|
rm -f "$GENISO_LOG" # Temporäre Datei löschen
|
||||||
next_iso_id
|
|
||||||
save_config
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
else
|
log_info "ISO-Image '$ISO_FILENAME' erfolgreich erstellt."
|
||||||
log_error "FEHLER ($EXIT_CODE) beim Erstellen des ISO-Images '$ISO_FILENAME'."
|
|
||||||
exit 1
|
# 2. Staging-Verzeichnis leeren
|
||||||
fi
|
log_info "Leere Staging-Verzeichnis..."
|
||||||
log_info "------------------------------------------------------------------"
|
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 "------------------------------------------------------------------"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -66,56 +66,56 @@ log_info "Archivierung gestartet. Aktuelle ISO: $CURRENT_ISO_ID, Zähler: $CURRE
|
|||||||
|
|
||||||
# 1. Alle neuen/unverarbeiteten MP3s finden
|
# 1. Alle neuen/unverarbeiteten MP3s finden
|
||||||
find "$SOURCE_DIR" -type f -name "*.mp3" | while read -r FILE_PATH; do
|
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)
|
# Prüfen, ob Datei bereits im Index ist (verhindert Doppelarchivierung)
|
||||||
[ -z "$KUENSTLER" ] && KUENSTLER="Unknown Artist"
|
if grep -q ";${FILE_PATH}$" "$INDEX_FILE"; then
|
||||||
[ -z "$TITEL" ] && TITEL="Unknown Title"
|
continue # Datei wurde bereits archiviert, überspringen
|
||||||
|
fi
|
||||||
|
|
||||||
# 4. Eindeutigen Dateinamen generieren und kopieren
|
# **KORREKTUR 1: Größenprüfung VOR Kopieren mit Dateigröße**
|
||||||
NEW_FILENAME=$(printf "%s_%06d.mp3" "$CURRENT_ISO_ID" "$CURRENT_FILE_COUNTER")
|
# Die Größe der aktuellen Datei holen
|
||||||
log_info "Kopiere $FILE_PATH zu $NEW_FILENAME"
|
FILE_SIZE=$(stat -c%s "$FILE_PATH")
|
||||||
cp "$FILE_PATH" "$STAGING_DIR/$NEW_FILENAME"
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
log_info "Archiviert: $NEW_FILENAME"
|
|
||||||
|
|
||||||
# 5. Index-Eintrag hinzufügen
|
# Größe des Staging-Verzeichnisses holen
|
||||||
echo "$KUENSTLER;$TITEL;$CURRENT_ISO_ID;$CURRENT_FILE_COUNTER;$FILE_PATH" >> "$INDEX_FILE"
|
CURRENT_STAGING_SIZE=$(du -bs "$STAGING_DIR" | awk '{print $1}')
|
||||||
|
|
||||||
# 6. Zähler erhöhen und Konfiguration speichern
|
# Bei Erreichen der Grenze: Schließe ISO ab und starte neue
|
||||||
CURRENT_FILE_COUNTER=$((CURRENT_FILE_COUNTER + 1))
|
# Prüfen, ob die Hinzufügung der aktuellen Datei das Limit überschreiten würde
|
||||||
save_config
|
if [[ $(($CURRENT_STAGING_SIZE + $FILE_SIZE)) -ge "$ISO_LIMIT_BYTES" ]]; then
|
||||||
else
|
log_warn "Nächste Datei würde Limit überschreiten. Finalisiere aktuelle ISO: $CURRENT_ISO_ID"
|
||||||
log_error "FEHLER beim Kopieren der Datei: $FILE_PATH"
|
finalize_iso
|
||||||
fi
|
# 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
|
done
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user