A matemática é um pouco complicada. Uma divisão inteira simples (file/50000+1)*50000
falhará. Se o número do arquivo for 50000, o resultado será 100000. Não é o que você deseja. Precisamos de uma mudança de origem:
$(( ((file-1)/50000+1)*50000 ))
Além disso, um esquema de código mais simples está ok:
#!/bin/bash
fsource=/opt/dms; fdest=/opt/nes_dms; istep=50000
cd "$fsource"
for f In *; do
i=$(( 1+(f-1)/istep )) # Which bucket?
fd="$fdest/$(( istep*i ))"
echo \
mv -t "$fd" "$f"
done
Adicionando algumas verificações [(é um diretório?) E (somente dígitos)]:
#!/bin/bash
fsource=/opt/dms/; fdest=/opt/nes_dms; istep=50000
for f in "$fsource"/*; do
[[ -d $f ]] || continue # Is a dir?
i=${f##*/} # Remove path.
[[ $i =~ ^[0-9]+$ ]] || continue # Only digits?
i=$((1+(i-1)/istep)) # Which bucket?
fd="$fdest/$(( istep*i ))"
echo \
mv -t "$fd" "$f"
done
Comente o eco quando estiver satisfeito com os valores e quiser executar os movimentos.