From 108ae634d8e69c5fdc0cd06261909d54844ffcee Mon Sep 17 00:00:00 2001 From: Thorsten Date: Tue, 7 Jan 2025 20:46:22 +0100 Subject: [PATCH] diverse fallbacks eingebaut --- README.md | 31 +++++++++++++++-------- shell_convert_comics.sh | 55 +++++++++++++++++++++++++++++++++++------ 2 files changed, 68 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index bb7d977..dce0150 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,19 @@ Dieses Skript ermöglicht die Umwandlung von Comic-Dateien zwischen den Formaten Das Skript benötigt folgende Programme: -- `p7zip`: Zum verarbeiten von `.cbz`-Dateien. -- `p7zip-plugins`: Zum verarbeiten von `.cbr`-Dateien. +`unrar` + - Zum Entpacken von `.cbr`-Dateien. + - Wird als erster Fallback verwendet. + +`7z (p7zip)` + - Zum Entpacken von .`cbr`-Dateien, falls unrar nicht verfügbar ist. + - Zum Erstellen von `.cbr`-Dateien (als RAR-Archive). + +`unzip` + - Zum Entpacken von `.cbz`-Dateien. + - Diese Abhängigkeit ist auf den meisten Linux-Distributionen standardmäßig installiert. +`zip` + - Zum Erstellen von `.cbz`-Dateien. ## Installation der benötigten Programme @@ -23,15 +34,15 @@ Unter Linux können die benötigten Tools mit den folgenden Befehlen installiert **Debian/Ubuntu:** ```bash sudo apt update -sudo apt install p7zip p7zip-plugins +sudo apt install p7zip p7zip-plugins unzip zip unrar ``` **Fedora:** ```bash -sudo dnf install p7zip p7zip-plugins +sudo dnf install p7zip p7zip-plugins unzip zip unrar ``` **Arch Linux:** ```bash -sudo pacman -S p7zip p7zip-plugins +sudo pacman -S p7zip p7zip-plugins unzip zip unrar ``` ## Installation @@ -44,21 +55,21 @@ chmod +x convert_comics.sh ``` ## Verwendung -Das Skript benötigt zwei Parameter: den Modus ('cbz' oder 'cbr') und den Pfad zu einem Verzeichnis, das die Dateien enthält. +Das Skript benötigt zwei Parameter: den Modus (`cbz` oder `cbr`) und den Pfad zu einem Verzeichnis, das die Dateien enthält. ## Beispiel 1: CBR zu CBZ konvertieren ```bash ./convert_comics.sh cbz /pfad/zum/verzeichnis ``` -- Konvertiert alle '.cbr'-Dateien im angegebenen Verzeichnis in '.cbz'. -- Die Original-'.cbr'-Dateien werden gelöscht. +- Konvertiert alle `.cbr`-Dateien im angegebenen Verzeichnis in `.cbz`. +- Die Original-`.cbr`-Dateien werden gelöscht. ## Beispiel 2: CBZ zu CBR konvertieren ```bash ./convert_comics.sh cbr /pfad/zum/verzeichnis ``` -- Konvertiert alle '.cbz'-Dateien im angegebenen Verzeichnis in '.cbr'. -- Die Original-'.cbz'-Dateien werden gelöscht. +- Konvertiert alle `.cbz`-Dateien im angegebenen Verzeichnis in `.cbr`. +- Die Original-`.cbz`-Dateien werden gelöscht. ## Hinweis diff --git a/shell_convert_comics.sh b/shell_convert_comics.sh index ae4e72f..80c55ea 100755 --- a/shell_convert_comics.sh +++ b/shell_convert_comics.sh @@ -15,23 +15,63 @@ if [[ ! -d "$directory" ]]; then 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 Packen mit 7z (für RAR und CBZ) +pack_with_7z() { + local output_file=$1 + local input_dir=$2 + + 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 + fi +} + + # Abhängig vom Modus die Konvertierung durchführen case $mode in cbz) - # CBR -> CBZ konvertieren for cbr_file in "$directory"/*.cbr; do if [[ -f "$cbr_file" ]]; then base_name="${cbr_file%.cbr}" temp_dir=$(mktemp -d) echo "Entpacke $cbr_file ..." - 7z x "$cbr_file" -o"$temp_dir" > /dev/null 2>&1 - if [[ $? -eq 0 ]]; then + if extract_with_fallback "$cbr_file" "$temp_dir"; then echo "Erstelle ${base_name}.cbz ..." - 7z a -tzip "${base_name}.cbz" "$temp_dir"/* > /dev/null 2>&1 + (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 @@ -43,20 +83,19 @@ case $mode in done ;; cbr) - # CBZ -> CBR konvertieren for cbz_file in "$directory"/*.cbz; do if [[ -f "$cbz_file" ]]; then base_name="${cbz_file%.cbz}" temp_dir=$(mktemp -d) echo "Entpacke $cbz_file ..." - 7z x "$cbz_file" -o"$temp_dir" > /dev/null 2>&1 + unzip -q "$cbz_file" -d "$temp_dir/" if [[ $? -eq 0 ]]; then echo "Erstelle ${base_name}.cbr ..." - 7z a -ttar "${base_name}.cbr" "$temp_dir"/* > /dev/null 2>&1 - if [[ $? -eq 0 ]]; then + 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