ChuJALT
Aporte: Enumerar - renombrar archivos de directorio en bash. - Versión para impresión

+- ChuJALT (https://chujalt.com)
+-- Foro: LENGUAJES PROGRAMACIÓN (https://chujalt.com/forum-18.html)
+--- Foro: Bash (https://chujalt.com/forum-21.html)
+--- Tema: Aporte: Enumerar - renombrar archivos de directorio en bash. (/thread-22.html)



Enumerar - renombrar archivos de directorio en bash. - chujalt - 07-03-2021

Saludos.

Vamos a ver un script en bash el cual ordena los archivos de un directorio, lo que hace es enumerarlos, es decir, mantiene el nombre del fichero pero le pone delante el número de orden, 1-_-unarchivo, 2-_-otroarchivo... etc.

Primero veamos el script y luego comentamos:

Código:
#!/bin/sh
i=1
for f in *.*
do
  renombrar="$i"-_-"${f#*}"
  mv "$f" "$renombrar"
  i=$((i+1))
done


Este script se debe ejecutar en el directorio donde están los archivos a enumerar.

El script enumera todos los archivos del directorio, pero si queremos que, por ejemplo, sólo enumere los archivos con extensión mp3 deberemos cambiar la línea for f in *.* por for f in *.mp3 

Otro ejemplo, vamos a suponer que en ese directorio hay varios tipos de archivos (mp3, mp4, wav) y queremos enumerarlos por separado. Entonces vamos a reservar la serie 1000 para los archivos mp3, la serie 2000 para mp4... etc. Entonces cambiaremos la línea que hemos comentado antes y donde pone i=1 lo cambiaremos por i=1000, para los archivos mp4 cambiaremos for f in *.* por for f in *.mp4 e i=1 por i=2000 y así sucesivamente.

Ahora vamos a suponer que por cualquier razón, por ejemplo que tenemos archivos nuevos y hay que borrar la numeración para luego volver a enumerarlos, entonces ejecutaremos este script:

Código:
#!/bin/sh
for f in *.*
do
  renombrar=${f##*-_-}
  mv "$f" "$renombrar"
done


Esto dejará el archivo con su nombre original, sin la numeración. Acordaros que como está el script quitará la numeración a todos los archivos, si queréis hacerlo en una extensión en concreto deberéis ponerla.

Bueno, ya está, espero que le sirva a alguien.

Saludos.