1
0
src/cbz/cbzcat
2024-03-20 19:29:32 -06:00

59 lines
992 B
Bash
Executable File

#!/bin/sh
set -e
usage(){
printf "Usage: %s [files...]\n" "$0"
exit 64 # sysexits.h(3) EX_USAGE
}
test -n "$2" \
|| usage
d="$(mktemp -d || printf '%s/.cbzcat' "$HOME/")"
trap 'rm -rf "$d"; trap - EXIT; exit' EXIT INT HUP
mkdir -p "$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 -f "$d"/x/*.xml
for g in "$d"/x/*; do
# if there aren't enough leading zeroes
if ! printf '%s' "$i" \
| wc -c \
| xargs test "$il" =; then
for h in "$d"/*
do test "$h" = "$d"/x \
|| printf '%s\n' "$h" \
| sed 's|[^/]*$|0&|' \
| xargs mv "$h"
done
# update index digit length
il="$(printf '1 + %s\n' "$il" | bc)"
fi
# 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)"
done
done
rm -r "$d"/x
zip -Z deflate out.cbz "$d"/*
rm -r "$d"