Quiero cambiar el nombre de todos los archivos en una carpeta con PREFIX+COUNTER+FILENAME
por ej.
entrada:
england.txt
canada.txt
france.txt
salida:
CO_01_england.txt
CO_02_canada.txt
CO_03_france.txt
Respuesta aceptada:
Esto hace lo que pides:
n=1; for f in *.txt; do mv "$f" "CO_$((n++))_$f"; done
Cómo funciona
-
n=1
Esto inicializa la variable
n
a 1. -
for f in *.txt; do
Esto inicia un ciclo sobre todos los archivos en el directorio actual cuyos nombres terminan con
.txt
. -
mv "$f" "CO_$((n++))_$f"
Esto cambia el nombre de los archivos para que tengan el
CO_
prefijo conn
como el contador. El++
el símbolo le dice a bash que incremente la variablen
. -
done
Esto señala el final del ciclo.
Mejora
Esta versión usa printf
lo que permite un mayor control sobre cómo se formateará el número:
n=1; for f in *.txt; do mv "$f" "$(printf "CO_%02i_%s" "$n" "$f")"; ((n++)); done
En particular, el %02i
El formato colocará un cero inicial antes del número cuando n
todavía está en un solo dígito.