En un terminal: cd
en el directorio en cuestión, luego
for x in 'ls -1 | sed -e 's/^\(.\).*//' | sort -u'; do
mkdir $x && mv -i ${x}?* $x
done
Esto supone que ningún archivo tiene un solo nombre de carácter antes de comenzar. Si lo hacen, puede apartarlos antes de ejecutar el procedimiento anterior:
mkdir singles && mv ? singles
y luego, muévelos a sus destinos correspondientes en la parte posterior.
Editar: Vea los comentarios a continuación para algunas advertencias. Si tiene problemas con líneas de comando demasiado largas, puede reemplazar la segunda línea por
mkdir $x && find . -maxdepth 1 -name "${x}?*" -exec mv -i {} $x \;