diff --git a/cbz/cbzcat b/cbz/cbzcat new file mode 100755 index 0000000..514d010 --- /dev/null +++ b/cbz/cbzcat @@ -0,0 +1,58 @@ +#!/bin/sh + +set -e + +usage(){ + printf "Usage: %s [files...]\n" "$0" + exit 64 # sysexits.h(3) EX_USAGE +} + +test -n "$2" \ + || usage + +set -x + +d="$(mktemp -d)" +mkdir "$d"/x + +i=1 # index +il=1 # index length in digits + +for f in "$@"; do + test -e "$f" \ + || usage + + unzip -d "$d"/x "$f" + rm "$d"/x/*.xml + + for g in "$d"/x/*; do + # move file to indexed position + printf '%s\n' "$g" \ + | sed 's|^.*\.||' \ + | xargs printf '%s/%s%s\n' "$d" "$i". \ + | xargs mv "$g" + + # increment i + i="$(printf '1 + %s\n' "$i" | bc)" + + # if there aren't enough leading zeroes + if ! printf '%s' "$i" \ + | wc -c \ + | xargs test "$il" =; then + for g in "$d"/* + do test "$g" = "$d"/x \ + || printf '%s\n' "$g" \ + | sed 's|[^/]*$|0&|' \ + | xargs mv "$g" + done + # update index digit length + il="$(printf '1 + %s\n' "$il" | bc)" + fi + done +done + +rm -r "$d"/x + +zip -Z deflate out.cbz "$d"/* + +rm -r "$d"