diff --git a/shell_convert_comics.sh b/shell_convert_comics.sh index 80c55ea..7224a30 100755 --- a/shell_convert_comics.sh +++ b/shell_convert_comics.sh @@ -41,73 +41,68 @@ extract_with_fallback() { return 1 } -# Funktion zum Packen mit 7z (für RAR und CBZ) -pack_with_7z() { - local output_file=$1 - local input_dir=$2 +# 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" - 7z a -r "$output_file" "$input_dir"/* > /dev/null 2>&1 - if [[ $? -eq 0 ]]; then - return 0 - else - echo "Fehler: Erstellen von $output_file fehlgeschlagen." - return 1 + 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" -# Abhängig vom Modus die Konvertierung durchführen -case $mode in - cbz) - for cbr_file in "$directory"/*.cbr; do - if [[ -f "$cbr_file" ]]; then - base_name="${cbr_file%.cbr}" - temp_dir=$(mktemp -d) + 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 - echo "Entpacke $cbr_file ..." - if extract_with_fallback "$cbr_file" "$temp_dir"; then - echo "Erstelle ${base_name}.cbz ..." - (cd "$temp_dir" && zip -r "${base_name}.cbz" ./* > /dev/null 2>&1) - if [[ $? -eq 0 ]]; then - echo "Lösche Originaldatei: $cbr_file" - rm "$cbr_file" - mv "${base_name}.cbz" "$directory/" - else - echo "Fehler beim Erstellen von ${base_name}.cbz" - fi - else - echo "Fehler beim Entpacken von $cbr_file" - fi - rm -rf "$temp_dir" - fi - done - ;; - cbr) - for cbz_file in "$directory"/*.cbz; do - if [[ -f "$cbz_file" ]]; then - base_name="${cbz_file%.cbz}" - temp_dir=$(mktemp -d) + # 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 - echo "Entpacke $cbz_file ..." - unzip -q "$cbz_file" -d "$temp_dir/" - if [[ $? -eq 0 ]]; then - echo "Erstelle ${base_name}.cbr ..." - if pack_with_7z "${base_name}.cbr" "$temp_dir"; then - echo "Lösche Originaldatei: $cbz_file" - rm "$cbz_file" - mv "${base_name}.cbr" "$directory/" - else - echo "Fehler beim Erstellen von ${base_name}.cbr" - fi - else - echo "Fehler beim Entpacken von $cbz_file" - fi - rm -rf "$temp_dir" - fi - done - ;; - *) - echo "Ungültiger Modus. Bitte 'cbz' oder 'cbr' verwenden." - exit 1 - ;; -esac + 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