Cómo cambiar el nombre del file en el script bash uno por uno

Tengo muchos files que se ven así:

data1.csv data2.csv . . data(n).csv 

Mi caso de uso es que cuando llame a mi script cambiará data1.csv to data.csv y los files restantes tal como están y la próxima vez que llame a mi script por segunda vez, moverá data1.csv a la carpeta procesada y cambiará data2.csv a data.csv etc.

Lo siguiente usa data.csv como un enlace al file solicitado para mantener el estado entre iteraciones.

 # check to see if an argument is given if [ "$#" -ne 1 ]; then echo "Illegal number of parameters" exit fi # check if ran before if so move that to processed/ directory if [ -h "data.csv" ]; then prev=`readlink data.csv` echo "Found previous run $prev" rm -f data.csv # remove link mv -f $prev processed/ # move previous file to processed directory echo "Moved to processed/$prev" fi # check to see if file exists if [ -e data$1.csv ]; then ln -s data$1.csv data.csv # link data.csv to the requested file echo "Linked data.csv -> data$1.csv" else echo "No such file data$1.csv" fi 

Si los nombres de los files no tienen líneas nuevas, puede encontrar el primer file para procesar en un script bash usando:

 first=$(ls --sort=version *.csv | head -1) ln -s "$first" data.csv 

sin embargo, antes de cambiar el nombre de ese file, debe asegurarse de que el existente anterior esté fuera del path:

 #! /bin/bash if [ -e data.csv ] ; then mv $(readlink data.csv) backup_directory rm data.csv fi 

Combínelos en el order correcto y agregue el procesamiento de data.csv al final y puede invocar repetidamente la secuencia de commands para procesar todos los files.