Skip to content

Instantly share code, notes, and snippets.

@itsXactlY
Created July 30, 2025 21:25
Show Gist options
  • Save itsXactlY/e937191936539d621a21c4fccd36796a to your computer and use it in GitHub Desktop.
Save itsXactlY/e937191936539d621a21c4fccd36796a to your computer and use it in GitHub Desktop.
burn cds easily
#!/bin/bash
# Konfiguration
SOURCE_DIR="/run/media/alca/store/"
TARGET_DIR="/run/media/alca/store/mp3"
MAX_SIZE_MB=650 # Etwas unter 700MB für Sicherheit
BURN_SPEED=24 # Brenngeschwindigkeit
# Farben für Output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}=== MP3 CD Brenner Script ===${NC}"
# Target-Verzeichnis erstellen
mkdir -p "$TARGET_DIR"
cd "$TARGET_DIR"
# Alte CD-Ordner löschen
rm -rf CD_*
echo -e "${YELLOW}Suche MP3s in $SOURCE_DIR...${NC}"
# Alle MP3s finden und sortieren
find "$SOURCE_DIR" -name "*.mp3" -type f | sort > /tmp/mp3_list.txt
TOTAL_MP3S=$(wc -l < /tmp/mp3_list.txt)
echo -e "${GREEN}Gefunden: $TOTAL_MP3S MP3-Dateien${NC}"
if [ $TOTAL_MP3S -eq 0 ]; then
echo -e "${RED}Keine MP3s gefunden!${NC}"
exit 1
fi
# Aufteilen in CD-Ordner
COUNTER=1
CURRENT_DIR="CD_$(printf '%02d' $COUNTER)"
mkdir "$CURRENT_DIR"
CURRENT_SIZE=0
echo -e "${YELLOW}Teile auf CDs auf...${NC}"
while IFS= read -r mp3_file; do
# Dateigröße in MB ermitteln
FILE_SIZE=$(du -m "$mp3_file" 2>/dev/null | cut -f1)
# Prüfen ob Datei auf aktuelle CD passt
if [ $((CURRENT_SIZE + FILE_SIZE)) -gt $MAX_SIZE_MB ]; then
echo -e "${GREEN}CD $COUNTER: ${CURRENT_SIZE}MB ($(ls "$CURRENT_DIR" | wc -l) Dateien)${NC}"
# Neue CD beginnen
COUNTER=$((COUNTER + 1))
CURRENT_DIR="CD_$(printf '%02d' $COUNTER)"
mkdir "$CURRENT_DIR"
CURRENT_SIZE=0
fi
# MP3 kopieren
cp "$mp3_file" "$CURRENT_DIR/" 2>/dev/null
if [ $? -eq 0 ]; then
CURRENT_SIZE=$((CURRENT_SIZE + FILE_SIZE))
fi
done < /tmp/mp3_list.txt
# Letzte CD anzeigen
echo -e "${GREEN}CD $COUNTER: ${CURRENT_SIZE}MB ($(ls "$CURRENT_DIR" | wc -l) Dateien)${NC}"
TOTAL_CDS=$COUNTER
echo -e "${YELLOW}Insgesamt $TOTAL_CDS CDs erstellt${NC}"
# Brennen-Funktion
burn_cd() {
local cd_dir=$1
local cd_num=$2
echo -e "${YELLOW}=== Brennen von $cd_dir ===${NC}"
echo -e "${RED}Lege eine leere CD ein und drücke ENTER...${NC}"
read
# ISO erstellen
echo -e "${YELLOW}Erstelle ISO...${NC}"
mkisofs -o "/tmp/${cd_dir}.iso" -R -J -joliet-long "$cd_dir"
if [ $? -ne 0 ]; then
echo -e "${RED}Fehler beim ISO erstellen!${NC}"
return 1
fi
# Brennen
echo -e "${YELLOW}Brenne CD...${NC}"
wodim -v speed=$BURN_SPEED "/tmp/${cd_dir}.iso"
if [ $? -eq 0 ]; then
echo -e "${GREEN}CD $cd_num erfolgreich gebrannt!${NC}"
echo -e "${YELLOW}Nimm die CD raus und beschrifte sie: '$cd_dir'${NC}"
else
echo -e "${RED}Fehler beim Brennen von CD $cd_num!${NC}"
echo -e "${YELLOW}Nochmal versuchen? (j/n)${NC}"
read retry
if [ "$retry" = "j" ] || [ "$retry" = "J" ]; then
burn_cd "$cd_dir" "$cd_num"
fi
fi
# ISO löschen
rm -f "/tmp/${cd_dir}.iso"
}
# Fragen ob gebrannt werden soll
echo -e "${YELLOW}Soll jetzt gebrannt werden? (j/n)${NC}"
read start_burn
if [ "$start_burn" = "j" ] || [ "$start_burn" = "J" ]; then
for ((i=1; i<=TOTAL_CDS; i++)); do
cd_folder="CD_$(printf '%02d' $i)"
burn_cd "$cd_folder" "$i"
if [ $i -lt $TOTAL_CDS ]; then
echo -e "${GREEN}CD $i/$TOTAL_CDS fertig!${NC}"
echo -e "${YELLOW}Drücke ENTER für die nächste CD...${NC}"
read
fi
done
echo -e "${GREEN}=== Alle $TOTAL_CDS CDs fertig gebrannt! ===${NC}"
else
echo -e "${YELLOW}CDs sind vorbereitet in: $TARGET_DIR${NC}"
echo -e "${YELLOW}Du kannst sie später einzeln brennen mit:${NC}"
for ((i=1; i<=TOTAL_CDS; i++)); do
cd_folder="CD_$(printf '%02d' $i)"
echo "mkisofs -o $cd_folder.iso -R -J $TARGET_DIR/$cd_folder && wodim -v $cd_folder.iso"
done
fi
# Aufräumen
rm -f /tmp/mp3_list.txt
echo -e "${GREEN}Script beendet!${NC}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment