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=1Esto inicializa la variable
na 1. -
for f in *.txt; doEsto 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 conncomo el contador. El++el símbolo le dice a bash que incremente la variablen. -
doneEsto 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.