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.

Solutions Collecting From Web of "Cómo cambiar el nombre del file en el script bash uno por uno"

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.