nov 12

BatRen: Utilidad para renombrar archivos en lote

por CrackVan

Se me ha presentado un caso en el que había que eliminar la mitad de los frames de varios vídeos para luego hacer un proceso con otro programa (bastante chapucero por cierto xD , los que lo hicieron se quedaron tranquilos…) que asocia esos frames con un punto GPS tomado a la vez que el vídeo.

Para eliminar los archivos, al ser entre 30.000 y 60.000 frames (archivos exportados en bmp) no podemos utilizar comandos que incluyan un “ls” ya que son demasiados y no lo va a soportar, así que decidí eliminar los archivos impares (para que quedasen la mitad de frames, ya que está grabado a 50fps y se requiere a 25fps), con los siguientes comandos:

  1. find . -name "Frame*1.bmp" -exec rm {} \;
  2. find . -name "Frame*3.bmp" -exec rm {} \;
  3. find . -name "Frame*5.bmp" -exec rm {} \;
  4. find . -name "Frame*7.bmp" -exec rm {} \;
  5. find . -name "Frame*9.bmp" -exec rm {} \;

Pues bien, resulta que el programilla chapucero en cuestión requiere que los frames tengan un nombre de archivo con un patrón determinado y fijo: “FrameXXXX.bmp” y que tengan una numeración correlativa, así que en este momento es cuando toca renombrar… muchos archivos.

Y me encontré con esta utilidad llamada BatRen, que es muy facil de utilizar y por lo que he podido ver, funciona realmente bien (y eso que la última versión es de 2006). La última versión disponible es la 0.3.1.

  1. batren -v -f 0 -p "Frame" -t "0000" Frame[0-9][0-9][0-9][0-9].bmp

Parámetros:

-v para que muestre salida (verbose)

-f
para indicarle desde que número debe comenzar (pero si en el directorio de salida ya está ese número, automáticamente comenzará con el siguiente disponible)

-p para el prefijo del nombre del archivo

-s
para el sufijo del nombre del archivo

-t mascara para el número, indica el número mínimo de caracteres numéricos, ya que si nos pasamos a 5 cifras lo incrementará automáticamente.

-d para indicar el nombre del directorio de salida, si no se indica por defecto es “_out”

El último parámetro “Frame[0-9][0-9][0-9][0-9].bmp” es el filtro de los archivos que queremos procesar, podría ser *bmp, *jpg o cualquier otro que necesitemos, como si de un comando “ls” o similar se tratara.

En este caso ejecuto BatRen con “Frame[0-9][0-9][0-9][0-9].bmp” y luego con “Frame[0-9][0-9][0-9][0-9][0-9].bmp”, para procesar primero los que tengan 4 dígitos y luego los que tienen 5, ya que de 0000 a 9999 hay 4 dígitos, pero luego aumenta a 5, y si hago un *bmp y lo ordena alfabéticamente, mezclaría números y no lo haría estrictamente en orden.

En la salida del programa veremos como va renombrando archivos:

  1. Copy Frame66534.bmp -> _out/Frame28267.bmp
  2. Copy Frame66536.bmp -> _out/Frame28268.bmp
  3. Copy Frame66538.bmp -> _out/Frame28269.bmp
  4. Copy Frame66540.bmp -> _out/Frame28270.bmp
  5. Copy Frame66542.bmp -> _out/Frame28271.bmp
  6. Copy Frame66544.bmp -> _out/Frame28272.bmp
  7. Copy Frame66546.bmp -> _out/Frame28273.bmp
  8. Copy Frame66548.bmp -> _out/Frame28274.bmp

Todo esto se pone en un bonito hack_skyview.sh y listo:

  1. #!/bin/bash
  2.  
  3. find . -name "Frame*1.bmp" -exec rm {} \;
  4. find . -name "Frame*3.bmp" -exec rm {} \;
  5. find . -name "Frame*5.bmp" -exec rm {} \;
  6. find . -name "Frame*7.bmp" -exec rm {} \;
  7. find . -name "Frame*9.bmp" -exec rm {} \;
  8.  
  9. batren -v -f 0 -p "Frame" -t "0000" Frame[0-9][0-9][0-9][0-9].bmp
  10.  
  11. batren -v -f 0 -p "Frame" -t "0000" Frame[0-9][0-9][0-9][0-9][0-9].bmp

A mi me ha resuelto un problema fácilmente, así que aquí queda por si a alguien le interesa…

Creo que me he extendido un poco de más jeje

  • Leido 130 veces
Dejanos tu comentario

Una respuesta en este post

  1. jose, 29. junio 2010, 14:57 | Internet Explorer Internet Explorer 8.0 Windows Windows XP

    Personalmente, usaría un “for” o una instrucción incremental ( A=$[A+1] ), pero siempre conviene conocer programas nuevos. Un saludo.

     

Dejanos tu Comentario