GNU/Linux >> Tutoriales Linux >  >> Linux

¿Renombrar en masa el archivo Bash con el contador?

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 con n como el contador. El ++ el símbolo le dice a bash que incremente la variable n .

  • 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.


Linux
  1. Lectura de líneas de un archivo con Bash:para vs. ¿Mientras?

  2. ¿For Loop con nombres de archivo?

  3. Cómo reemplazar espacios en nombres de archivos usando un script bash

  4. Agregar marca de tiempo a un nombre de archivo con mv en BASH

  5. ¿Cómo verificar si un archivo está vacío en Bash?

Bash:escribir en archivo

Comando de fuente Bash

Bash:Agregar al archivo

Redirección de Bash explicada con ejemplos

Cómo trabajar con enlaces duros y suaves en Linux

Ejecutar un script bash o un binario c en un sistema de archivos con la opción noexec