From 6a223aeece005ce0cdf80c98816381e4de8032db Mon Sep 17 00:00:00 2001 From: Thorsten Date: Mon, 6 Jan 2025 21:26:19 +0100 Subject: [PATCH] using 7zip for both filetypes --- README.md | 13 ++-- shell_convert_comics.sh | 152 ++++++++++++++++------------------------ 2 files changed, 68 insertions(+), 97 deletions(-) diff --git a/README.md b/README.md index e8d1be0..bb7d977 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,9 @@ Dieses Skript ermöglicht die Umwandlung von Comic-Dateien zwischen den Formaten Das Skript benötigt folgende Programme: - `unrar`: Zum Entpacken von `.cbr`-Dateien. - `rar`: Zum Erstellen von `.cbr`-Dateien. - `zip`: Zum Erstellen von `.cbz`-Dateien. - `unzip`: Zum Entpacken von `.cbz`-Dateien. +- `p7zip`: Zum verarbeiten von `.cbz`-Dateien. +- `p7zip-plugins`: Zum verarbeiten von `.cbr`-Dateien. + ## Installation der benötigten Programme @@ -24,15 +23,15 @@ Unter Linux können die benötigten Tools mit den folgenden Befehlen installiert **Debian/Ubuntu:** ```bash sudo apt update -sudo apt install unrar rar zip unzip +sudo apt install p7zip p7zip-plugins ``` **Fedora:** ```bash -sudo dnf install unrar rar zip unzip +sudo dnf install p7zip p7zip-plugins ``` **Arch Linux:** ```bash -sudo pacman -S unrar rar zip unzip +sudo pacman -S p7zip p7zip-plugins ``` ## Installation diff --git a/shell_convert_comics.sh b/shell_convert_comics.sh index ccd4f8a..ae4e72f 100755 --- a/shell_convert_comics.sh +++ b/shell_convert_comics.sh @@ -1,102 +1,74 @@ #!/bin/bash +# Prüfen, ob der richtige Modus (cbz oder cbr) und ein Verzeichnis angegeben wurden if [[ $# -ne 2 ]]; then - echo "Usage: $0 " - echo "Modes:" - echo " cbz Convert CBR to CBZ" - echo " cbr Convert CBZ to CBR" + echo "Verwendung: $0 " exit 1 fi -mode="$1" -input_dir="$2" +mode=$1 +directory=$2 -if [[ ! -d "$input_dir" ]]; then - echo "Fehler: Verzeichnis $input_dir existiert nicht." +# Überprüfen, ob das Verzeichnis existiert +if [[ ! -d "$directory" ]]; then + echo "Fehler: Das angegebene Verzeichnis existiert nicht." exit 1 fi -if [[ "$mode" == "cbz" ]]; then - for cbr_file in "$input_dir"/*.cbr; do - if [[ ! -f "$cbr_file" ]]; then - echo "Keine CBR-Dateien im Verzeichnis $input_dir gefunden." - exit 0 - 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) - base_name="${cbr_file%.cbr}" - temp_dir="${base_name}_temp" + echo "Entpacke $cbr_file ..." + 7z x "$cbr_file" -o"$temp_dir" > /dev/null 2>&1 + if [[ $? -eq 0 ]]; then + echo "Erstelle ${base_name}.cbz ..." + 7z a -tzip "${base_name}.cbz" "$temp_dir"/* > /dev/null 2>&1 + if [[ $? -eq 0 ]]; then + echo "Lösche Originaldatei: $cbr_file" + rm "$cbr_file" + 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) + # 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 "Verarbeite: $cbr_file" - - # Entpacken - mkdir -p "$temp_dir" - unrar x -inul "$cbr_file" "$temp_dir/" - if [[ $? -ne 0 ]]; then - echo "Fehler beim Entpacken von $cbr_file. Überspringe Datei." - rm -r "$temp_dir" - continue - fi - - # ZIP erstellen - ( - cd "$temp_dir" || exit - zip -r -q "${base_name}.cbz" ./* - ) - mv "${temp_dir}/${base_name}.cbz" "$input_dir/" - - if [[ $? -ne 0 ]]; then - echo "Fehler beim Erstellen der CBZ für $cbr_file. Überspringe Datei." - rm -r "$temp_dir" - continue - fi - - # Aufräumen - rm -r "$temp_dir" - rm "$cbr_file" - echo "Erfolgreich umgewandelt: $cbr_file -> ${base_name}.cbz" - done - -elif [[ "$mode" == "cbr" ]]; then - for cbz_file in "$input_dir"/*.cbz; do - if [[ ! -f "$cbz_file" ]]; then - echo "Keine CBZ-Dateien im Verzeichnis $input_dir gefunden." - exit 0 - fi - - base_name="${cbz_file%.cbz}" - temp_dir="${base_name}_temp" - - echo "Verarbeite: $cbz_file" - - # Entpacken - mkdir -p "$temp_dir" - unzip -q "$cbz_file" -d "$temp_dir/" - if [[ $? -ne 0 ]]; then - echo "Fehler beim Entpacken von $cbz_file. Überspringe Datei." - rm -r "$temp_dir" - continue - fi - - # RAR erstellen - rar a -inul "${base_name}.cbr" "$temp_dir"/* - mv "${base_name}.cbr" "$input_dir/" - - if [[ $? -ne 0 ]]; then - echo "Fehler beim Erstellen der CBR für $cbz_file. Überspringe Datei." - rm -r "$temp_dir" - continue - fi - - # Aufräumen - rm -r "$temp_dir" - rm "$cbz_file" - echo "Erfolgreich umgewandelt: $cbz_file -> ${base_name}.cbr" - done - -else - echo "Unbekannter Modus: $mode" - echo "Bitte 'cbz' oder 'cbr' angeben." - exit 1 -fi - -echo "Alle Dateien im Verzeichnis $input_dir wurden verarbeitet." + echo "Entpacke $cbz_file ..." + 7z x "$cbz_file" -o"$temp_dir" > /dev/null 2>&1 + 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 + echo "Lösche Originaldatei: $cbz_file" + rm "$cbz_file" + 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