#!/bin/bash
# Desc: Collects .jpg/jpeg files from a Calibre .htmlz file into .cbz files
-# Version: 0.0.3
+# Version: 0.1.2
+# Depends: jdupes 1.27.3
for fin in ./*.htmlz; do
(
dout="${fin%.*}";
unzip "$fin" -x / -d "$dout";
pushd "$dout";
- mapfile -t images < <(cat index.html | grep -E "(.jpg|.jpeg)" | sed -E -e 's#.+(images/[0-9]+.(jpeg|jpg)).+#\1#' | uniq; );
- dout="./output";
- if [[ -d "$dout" ]]; then
- rm -r "$dout";
+ mapfile -t images < <(cat index.html | grep -E "(.jpg|.jpeg|.png)" | sed -E -e 's#.+(images/[0-9]+.(jpeg|jpg|png)).+#\1#' | uniq; );
+ dout2="./output";
+ if [[ -d "$dout2" ]]; then
+ rm -r "$dout2";
fi;
- mkdir "$dout";
+ mkdir "$dout2";
n=1;
for path in "${images[@]}"; do
- fnew="${dout}/$(printf "%06d" "$n").jpg";
+ fnew="${dout2}/$(printf "%06d" "$n").jpg";
cp "$path" "$fnew";
((n++));
done;
+ # Add cover file if present
if [[ -f cover.jpg ]]; then
- cp -n cover.jpg ./output/000000.jpg;
+ cp -n cover.jpg "${dout2}/000000.jpg";
+ fi;
+ # Remove duplicate images
+ if command -v jdupes 1>/dev/random 2>&1; then
+ jdupes -dN "$dout2";
fi;
faout="output.cbz";
if [[ -f "$faout" ]]; then
rm "$fout";
fi;
- zip -j output.cbz output/*;
+ zip -j output.cbz "$dout2"/*;
) &
done;
wait && echo "STATUS:Finished." 1>&2;