Coloque aspas duplas no final da linha e no nome de base:
mv "$fname" "./archive/$(basename "$fname")-$(date +%Y%m%d-%T)"
As variáveis serão interpretadas e os espaços devem estar corretos.
Como lidar com arquivos com seus nomes contendo espaços em um script de shell.
Aqui está o que estou tentando
find /abc/xyz -name 'BY567*.csv' | while read fname
do
mv "$fname" ./archive/$(basename $fname)-$(date +%Y%m%d-%T)
done
Mas quando faço isso, retira o nome do arquivo depois do espaço. Como se o nome do arquivo fosse BY567_Test file.csv, ele será alterado para BY567_Test-datetimestamp e não para o arquivo BY567_Test.csv-datetimestamp.