command mv para mover y cambiar el nombre del set de files

Estoy usando el command mv para mover un set de files de una carpeta a otra que también implica renombrar los files.

mv <SRC_PATH>/ABC_$t1.dat <DEST_PATH>/ABC_$t1_$$.dat 

Estoy usando el código anterior para un set de files. La única diferencia está en el nombre de los files que son el valor de la variable $ t1. Por ejemplo:

  while loop requinetworking times do t1=<GetValueOfT1 > mv <SRC_PATH>/ABC_$t1.dat <DEST_PATH>/ABC_$t1_$$.dat done 

En el código anterior t1 tendrá un valor de 123,234,345.

Entonces, si tengo ABC_123.dat, ABC_234.dat, ABC_345.dat en el directory de origen, entonces mi directory de destino tendrá ABC_123_1808.dat, ABC_234_1808.dat, ABC_345_1808.dat dado 1808 es el pid.

Pero después de todo, la ruta de destino del movimiento solo contiene el último file. Si eliminé el "$$" del nombre de destino, entonces no hay problema. Por ejemplo:

  mv <SRC_PATH>/ABC_$t1.dat <DEST_PATH>/ABC_$t1.dat 

¿Que estoy haciendo mal?

Existen commands para ese tipo de cambio de nombre masivo.

Personalmente, uso mmv :

 mmv <SRC_PATH>/"ABC_*.dat" <DEST_PATH>/"ABC_#1_$$.dat" 

Supongamos que tiene una variable t1 que contiene un set de valores separados por comas:

 t1=$(GetValueOfT1) # For example t1='123,456,789' 

Puede aplicar cada uno de estos a su vez con un ciclo como este

 OIFS="$IFS" IFS=, for v in $t1 do echo "Processing with v=$v:" >&2 mv "$SRC_PATH/ABC_${v}.dat" "$DEST_PATH/ABC_${v}_$$.dat" done IFS="$OIFS" 

Los primeros $t1 no se deben citar porque necesitamos que el shell divida el valor en sus caracteres de coma. (Esto está controlado por la variable de shell $IFS , que guardamos para que podamos restaurarla al final del ciclo.) Las demás variables deberían citarse para protegerlas contra la split inesperada de palabras en espacios en blanco, comas, etc. Finalmente , debe presentar $v como ${v} porque, de lo contrario, el shell includeá el carácter _ inmediatamente siguiente como parte del nombre de la variable, y $v_ no es lo que queremos.

Te recomiendo que prefijas el mv con echo (es decir, echo mv ... ) antes de ejecutar esto en time real, para que puedas examinar la salida antes de que cambie algo.