using 7zip for both filetypes

This commit is contained in:
2025-01-06 21:26:19 +01:00
parent 6d4baad203
commit 6a223aeece
2 changed files with 68 additions and 97 deletions

View File

@@ -13,10 +13,9 @@ Dieses Skript ermöglicht die Umwandlung von Comic-Dateien zwischen den Formaten
Das Skript benötigt folgende Programme: Das Skript benötigt folgende Programme:
`unrar`: Zum Entpacken von `.cbr`-Dateien. - `p7zip`: Zum verarbeiten von `.cbz`-Dateien.
`rar`: Zum Erstellen von `.cbr`-Dateien. - `p7zip-plugins`: Zum verarbeiten von `.cbr`-Dateien.
`zip`: Zum Erstellen von `.cbz`-Dateien.
`unzip`: Zum Entpacken von `.cbz`-Dateien.
## Installation der benötigten Programme ## Installation der benötigten Programme
@@ -24,15 +23,15 @@ Unter Linux können die benötigten Tools mit den folgenden Befehlen installiert
**Debian/Ubuntu:** **Debian/Ubuntu:**
```bash ```bash
sudo apt update sudo apt update
sudo apt install unrar rar zip unzip sudo apt install p7zip p7zip-plugins
``` ```
**Fedora:** **Fedora:**
```bash ```bash
sudo dnf install unrar rar zip unzip sudo dnf install p7zip p7zip-plugins
``` ```
**Arch Linux:** **Arch Linux:**
```bash ```bash
sudo pacman -S unrar rar zip unzip sudo pacman -S p7zip p7zip-plugins
``` ```
## Installation ## Installation

View File

@@ -1,102 +1,74 @@
#!/bin/bash #!/bin/bash
# Prüfen, ob der richtige Modus (cbz oder cbr) und ein Verzeichnis angegeben wurden
if [[ $# -ne 2 ]]; then if [[ $# -ne 2 ]]; then
echo "Usage: $0 <mode> <directory>" echo "Verwendung: $0 <cbz|cbr> <Verzeichnis>"
echo "Modes:"
echo " cbz Convert CBR to CBZ"
echo " cbr Convert CBZ to CBR"
exit 1 exit 1
fi fi
mode="$1" mode=$1
input_dir="$2" directory=$2
if [[ ! -d "$input_dir" ]]; then # Überprüfen, ob das Verzeichnis existiert
echo "Fehler: Verzeichnis $input_dir existiert nicht." if [[ ! -d "$directory" ]]; then
echo "Fehler: Das angegebene Verzeichnis existiert nicht."
exit 1 exit 1
fi fi
if [[ "$mode" == "cbz" ]]; then # Abhängig vom Modus die Konvertierung durchführen
for cbr_file in "$input_dir"/*.cbr; do case $mode in
if [[ ! -f "$cbr_file" ]]; then cbz)
echo "Keine CBR-Dateien im Verzeichnis $input_dir gefunden." # CBR -> CBZ konvertieren
exit 0 for cbr_file in "$directory"/*.cbr; do
fi if [[ -f "$cbr_file" ]]; then
base_name="${cbr_file%.cbr}"
temp_dir=$(mktemp -d)
base_name="${cbr_file%.cbr}" echo "Entpacke $cbr_file ..."
temp_dir="${base_name}_temp" 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" echo "Entpacke $cbz_file ..."
7z x "$cbz_file" -o"$temp_dir" > /dev/null 2>&1
# Entpacken if [[ $? -eq 0 ]]; then
mkdir -p "$temp_dir" echo "Erstelle ${base_name}.cbr ..."
unrar x -inul "$cbr_file" "$temp_dir/" 7z a -ttar "${base_name}.cbr" "$temp_dir"/* > /dev/null 2>&1
if [[ $? -ne 0 ]]; then if [[ $? -eq 0 ]]; then
echo "Fehler beim Entpacken von $cbr_file. Überspringe Datei." echo "Lösche Originaldatei: $cbz_file"
rm -r "$temp_dir" rm "$cbz_file"
continue else
fi echo "Fehler beim Erstellen von ${base_name}.cbr"
fi
# ZIP erstellen else
( echo "Fehler beim Entpacken von $cbz_file"
cd "$temp_dir" || exit fi
zip -r -q "${base_name}.cbz" ./* rm -rf "$temp_dir"
) fi
mv "${temp_dir}/${base_name}.cbz" "$input_dir/" done
;;
if [[ $? -ne 0 ]]; then *)
echo "Fehler beim Erstellen der CBZ für $cbr_file. Überspringe Datei." echo "Ungültiger Modus. Bitte 'cbz' oder 'cbr' verwenden."
rm -r "$temp_dir" exit 1
continue ;;
fi esac
# 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."