#!/bin/sh -e
# Invoke me thusly:
# find srv -depth -exec ./shredname {} + | pv -ls $(find srv | wc -l) >/dev/null
tmp="$(mktemp -td chargen.XXXXXXXX)"
fifo="${tmp}/chargen.fifo"
chargen() {
mkfifo "${fifo}"
base64 < /dev/urandom | tr -dc 'A-Za-z0-9' > "${fifo}"
}
cleanup() {
[ -z "${*}" ] || kill -TERM "${@}"
rm -rf "${tmp}"
}
# Spawn chargen process
chargen &
pid=$!
trap "cleanup ${pid}; exit" EXIT
trap "echo Abort; exit" HUP INT TERM KILL
# Wait for chargen fifo to exist
while [ ! -e "${fifo}" ]
do
sleep 0
done
# Open chargen fifo for reading
exec 3< "${fifo}"
while [ "${1}" ]
do
dir="${1%/*}"
[ "${dir}" != "${1}" ] || dir="."
nym="${1##*/}"
len="$(printf %s "${nym}" | wc -c)"
#new="$(dd if=/dev/urandom bs=16 count=${len} 2>&- | base64 | tr -dc 'A-Za-z0-9' | cut -c1-${len})"
#new="$(base64 < /dev/urandom | tr -dc 'A-Za-z0-9' | dd bs=${len} count=1 2>&-)" || true
new="$(dd bs=${len} count=1 <&3 2>&-)" || true
#echo "${dir}: ${nym} -> ${new} (${len})"
mv -v "${dir}/${nym}" "${dir}/${new}"
shift
done