Files
shell_convert_comics/shell_convert_comics.sh
2025-01-07 20:46:22 +01:00

114 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# Prüfen, ob der richtige Modus (cbz oder cbr) und ein Verzeichnis angegeben wurden
if [[ $# -ne 2 ]]; then
echo "Verwendung: $0 <cbz|cbr> <Verzeichnis>"
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 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)
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 ..."
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)
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