Given the largish number of files in the source directory, the proposed solution will likely take a couple of minutes.
If you don't want to wait, you might want to consider a solution that doesn't spawn a process for each move.
To batch the move, you can utilize the fact that
--link sort of behaves like a move -- it the source and destination are on the same filesystem, the op will be quick, otherwise a whole copy will be made.
cpio -lpd will leave a hardlink to each source file, but those are easy to remove en-mass with
rm -r later if the operation was a succcess:
The implementation of the directory splitter might look something like:
local src=$1 nbatches=$2 dest=$3
trap 'rm -rf "$tmpd"' EXIT
tmpd="$(mktemp -d "$tmpd")"
find -type f "$src" > "$tmpd/files"
local nfiles=$(wc -l < "$tmpd/files")
( cd "$tmpd"; split -l "$batchsz" -d files )
mkdir -p "$dest/$i"
< x$i cpio -pdl "$dest/$i"