A resposta rápida e suja seria a seguinte:
array=('echo {a..z}{a..z}{a..z}');i=0; for FILENAME in *; do mv $FILENAME REF${array[i]}_$FILENAME; i=$(($i+1)); done
Mas eu prefiro fazer isso como um script que você pode executar - é mais fácil de manter e descrever
array=('echo {a..z}{a..z}{a..z}')
i=0
for FILENAME in *
do
mv $FILENAME REF${array[i]}_$FILENAME
i=$(($i+1))
done
A primeira linha carrega uma sequência de letras de 3 dígitos, iniciando aaa e prosseguindo até zzz. Você pode diminuir ou aumentar o tamanho dessa matriz aumentando ou diminuindo o número de {a..z} - e você pode substituí-la por letras maiúsculas ou outra sequência simples.
i é um contador que nós incrementamos para que possamos obter uma sequência única para cada valor REF.
Observo que não gosto do bit de código "FILENAME in *", porque ele não funciona bem com os subdiretórios. Eu estaria inclinado a substituir essa linha com
for FILENAME in 'find . -type f'
para lidar com arquivos, incluindo subdiretórios ou
for FILENAME in 'find . -maxdepth 1 -type f'
para arquivos somente no diretório atual (ou seja, não recursivo e ignorando diretórios)