A abordagem mais simples dependerá de quanto você pode confiar em seus usuários. Se você não precisa testar se os dois arquivos existem ou se os nomes estão corretos ou algo do tipo, você nem precisa de um script. Você pode fazer isso com um simples find
:
find /dir/to/source -name "ABC*" -mmin +5 -exec mv {} /destination/dir \;
Se você precisa ter certeza de que i) ambos os arquivos estão lá e ii) ambos têm um tempo de modificação de pelo menos 5 minutos atrás, em um sistema GNU, você poderia fazer isto:
#!/usr/bin/env bash
SOURCEDIR="/dir/to/source"
DESTDIR="/destination/dir"
for f in "${SOURCEDIR}"/*.xml; do
## Make sure the file exists and is a regular file (or symlink to regular file),
## and that its modification date is at least 5 minutes ago
[ -f "$f" ] && [ "$(( $(date +%s) - $(stat -c %Y "$f") ))" -ge 300 ] || continue
## Do the same for a file of the same name but with the .mxf extension.
mxf="${SOURCEDIR}/$(basename "$f" .xml).mxf";
[ -f "$mxf" ] && [ "$(( $(date +%s) - $(stat -c %Y "$no_ext") ))" -ge 300 ] || continue
## We will only get to this point if all of the above tests were successful
echo mv -v "$f" "$mxf" "$DESTDIR"
done