1
0
src/cbz/cbzcat

89 lines
1.3 KiB
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\n' "$HOME/")"
if test -n "$DEBUG"; then
printf 'Using temporary directory %s\n' "$d"
set -x
else
trap 'rm -rf "$d"; trap - EXIT; exit' EXIT INT HUP
fi
parallel \
test -e {} \
::: "$@" \
|| usage
parallel --bar \
unzip -qqd "$d/"{#} {} \
::: "$@"
# num is created by the shell (parallel in this case) before the pipeline is
# run, so we have to compensate for it already being in the directory when the
# files are listed
parallel \
rm -f {}/*.xml \; \
ls {} \
\| grep -v \
-e '^num$' \
\| wc -l \
\>{}/num \; \
printf '0\\n' \
'>>'{}/prevs \; \
::: "$d"/*
parallel \
test {1/} -lt {2/} \
'&&' dd \
'<'{1}/num \
'>>'{2}/prevs \
'2>'/dev/null \
'||' true \
::: "$d"/* \
::: "$d"/*
parallel \
\<{}/prevs \
sed 's/\\$/ + /' \
\| tr -d '\n' \
\| sed 's/ + \\$//' \
\| bc \
\>{}/sum \
::: "$d"/*
false
parallel \
ls {}/../ \; \
parallel -I [] --arg-sep :::: \
test [] -lt {} \
'&&' '<'[]/num xargs \
printf '%s + ' \
:::: {}/../* \
\| sed 's| + $||' \
\| bc \
\>{}/prevs \
::: "$d"/*
mkdir "$d"/0
false
parallel --dry-run sh -c "\
for dir in "
zip -Z deflate out.cbz "$d"/0/*
rm -r "$d"