Se bem entendi, você deseja levar os primeiros caracteres de cada nome de arquivo até a primeira letra que não é a letra e combiná-los com os primeiros caracteres do diretório de destino até o primeiro _
. Supondo que cada um desses padrões corresponda apenas uma vez, você pode fazer:
for file in /var/backup/*; do
fname=${file##*/};
fname=${fname/.*/};
cp -v "$file" /path/"$fname"*/;
done
O resultado é:
$ ls /path/*
/path/adbs_32:
adbs.spec
/path/dmsx_ty_32:
dmsx.spec
/path/fomru_ts_td-45:
fomru32.spec
/path/gend_monitor:
gend.spec