Jeremy Cline cce01a3
#!/bin/sh
Jeremy Cline cce01a3
# Reads filenames on stdin, xz-compresses each in place.
Jeremy Cline cce01a3
# Not optimal for "compress relatively few, large files" scenario!
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# How many xz's to run in parallel:
Jeremy Cline cce01a3
procgroup=""
Jeremy Cline cce01a3
while test "$#" != 0; do
Jeremy Cline cce01a3
	# Get it from -jNUM
Jeremy Cline cce01a3
	N="${1#-j}"
Jeremy Cline cce01a3
	if test "$N" = "$1"; then
Jeremy Cline cce01a3
		# Not -j<something> - warn and ignore
Jeremy Cline cce01a3
		echo "parallel_xz: warning: unrecognized argument: '$1'"
Jeremy Cline cce01a3
	else
Jeremy Cline cce01a3
		procgroup="$N"
Jeremy Cline cce01a3
	fi
Jeremy Cline cce01a3
	shift
Jeremy Cline cce01a3
done
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# If told to use only one cpu:
Jeremy Cline cce01a3
test "$procgroup" || exec xargs -r xz
Jeremy Cline cce01a3
test "$procgroup" = 1 && exec xargs -r xz
Jeremy Cline cce01a3
Jeremy Cline cce01a3
# xz has some startup cost. If files are really small,
Jeremy Cline cce01a3
# this cost might be significant. To combat this,
Jeremy Cline cce01a3
# process several files (in sequence) by each xz process via -n 16:
Jeremy Cline cce01a3
exec xargs -r -n 16 -P $procgroup xz