59 lines
992 B
Bash
Executable File
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"
|