#!/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"