La respuesta rápida y sucia sería la siguiente:
array=(`echo {a..z}{a..z}{a..z}`);i=0; for FILENAME in *; do mv $FILENAME REF${array[i]}_$FILENAME; i=$(($i+1)); done
Pero prefiero hacerlo como un script que luego puede ejecutar, es más fácil de mantener y describir.
array=(`echo {a..z}{a..z}{a..z}`)
i=0
for FILENAME in *
do
mv $FILENAME REF${array[i]}_$FILENAME
i=$(($i+1))
done
La primera línea carga una secuencia de letras de 3 dígitos, comenzando aaa, y descendiendo a zzz. Puede reducir o aumentar el tamaño de esta matriz aumentando o disminuyendo el número de {a..z}, y puede reemplazarlo con letras mayúsculas o alguna otra secuencia simple.
i es un contador que incrementamos para que podamos obtener una secuencia única para cada valor de REF.
Observo que no me gusta el bit de código "NOMBRE DE ARCHIVO en *", porque no funciona bien con los subdirectorios. Me inclino a reemplazar esa línea con
for FILENAME in `find . -type f`
para manejar archivos, incluyendo subdirectorios, o
for FILENAME in `find . -maxdepth 1 -type f`
para archivos solo en el directorio actual (es decir, no lo recursivo, e ignorar directorios)