#!/bin/bash # Prüfen, ob der richtige Modus (cbz oder cbr) und ein Verzeichnis angegeben wurden if [[ $# -ne 2 ]]; then echo "Verwendung: $0 " exit 1 fi mode=$1 directory=$2 # Überprüfen, ob das Verzeichnis existiert if [[ ! -d "$directory" ]]; then echo "Fehler: Das angegebene Verzeichnis existiert nicht." exit 1 fi # Funktion zum Entpacken mit Fallback auf 7z extract_with_fallback() { local archive_file=$1 local output_dir=$2 # Versuch mit unrar if command -v unrar &> /dev/null; then unrar x -inul "$archive_file" "$output_dir/" if [[ $? -eq 0 ]]; then return 0 fi echo "Warnung: Entpacken mit 'unrar' fehlgeschlagen, versuche '7z'..." fi # Fallback auf 7z if command -v 7z &> /dev/null; then 7z x "$archive_file" -o"$output_dir/" > /dev/null 2>&1 if [[ $? -eq 0 ]]; then return 0 fi echo "Fehler: Entpacken mit '7z' fehlgeschlagen." fi return 1 } # Funktion zum Konvertieren von CBR nach CBZ convert_cbr_to_cbz() { local file=$1 local base_name="${file%.cbr}" local temp_dir="${base_name}_tmp" mkdir -p "$temp_dir" extract_with_fallback "$file" "$temp_dir" if [[ $? -ne 0 ]]; then echo "Fehler beim Entpacken von $file" rm -rf "$temp_dir" return fi # Erstellen des neuen CBZ-Archivs zip -r "${base_name}.cbz" "$temp_dir" > /dev/null if [[ $? -eq 0 ]]; then rm "$file" echo "Erfolgreich konvertiert: $file -> ${base_name}.cbz" else echo "Fehler beim Erstellen von ${base_name}.cbz" fi rm -rf "$temp_dir" } # Funktion zum Konvertieren von CBZ nach CBR convert_cbz_to_cbr() { local file=$1 local base_name="${file%.cbz}" local temp_dir="${base_name}_tmp" mkdir -p "$temp_dir" unzip -q "$file" -d "$temp_dir" if [[ $? -ne 0 ]]; then echo "Fehler beim Entpacken von $file" rm -rf "$temp_dir" return fi # Erstellen des neuen CBR-Archivs rar a -r "${base_name}.cbr" "$temp_dir" > /dev/null if [[ $? -eq 0 ]]; then rm "$file" echo "Erfolgreich konvertiert: $file -> ${base_name}.cbr" else echo "Fehler beim Erstellen von ${base_name}.cbr" fi rm -rf "$temp_dir" } # Dateien je nach Modus rekursiv finden und konvertieren if [[ "$mode" == "cbz" ]]; then find "$directory" -type f -name "*.cbr" | while read -r file; do convert_cbr_to_cbz "$file" done elif [[ "$mode" == "cbr" ]]; then find "$directory" -type f -name "*.cbz" | while read -r file; do convert_cbz_to_cbr "$file" done else echo "Fehler: Ungültiger Modus. Verwenden Sie 'cbz' oder 'cbr'." exit 1 fi