109 lines
2.7 KiB
Bash
Executable File
109 lines
2.7 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 Konvertieren von CBR nach CBZ
|
|
convert_cbr_to_cbz() {
|
|
local file=$1
|
|
local base_name="${file%.cbr}"
|
|
local temp_dir="${base_name}_tmp"
|
|
|
|
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"
|
|
|
|
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
|
|
|
|
# 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
|
|
|
|
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
|