89 lines
1.3 KiB
Bash
Executable File
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"
|