Aqui está uma ideia para você. Não foi testado embora.
A idéia é separar os arquivos e diretórios recém-descompactados de cada arquivo de origem em sua própria pasta temporária. Isso é recursivamente repetido e, quando a recursão volta das profundezas, os arquivos e diretórios são movidos para o destino correto e o diretório temporário é removido.
function vacatetmp () {
echo "Vacating TMP folder ${1}...."
# You need a prefix for the new auxiliary temporary folders.
prefix=SomeGoodPrefix
for i in "$1"/*; do
if [ -f "$i" ]; then
# From your explanation:
# "Look up the mime type of "$i" and unzip the files into "$1"."
# Now, before you mix the new files and dirs with the old ones,
# unzip them to a special new directory with the prefix and the file name
# so that they're not mixed with the files and directories already present in "$1".
mkdir "$1"/"${prefix}""$i" &&
# How do you pass the target directory to "caseit"?
# However you do, pass it the temporary folder.
caseit "$i" "$1"/"${prefix}""$i" &&
# Now the new unzipped files and folders are in "$1"/"${prefix}""$i", so
# vacatetmp the auxiliary prefixed directory:
vacatetmp "$1"/"${prefix}""$i" &&
# and after you've finished with vacatetmp-ing that directory,
# move the contents of it to "$1".
mv "$1"/"${prefix}""$i"/* "$1" &&
# And finally remove the prefixed directory.
rmdir "$1"/"${prefix}""$1"
# This file is done. Recursively.
elif [ -d "$i" ]; then
vacatetmp "$i"
fi
done
}
Deixe-me saber se eu tropecei em algum lugar. Não foi testado, como eu avisei antes.