Secciones

Artículos para tus primeros pasos

Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos: 

Entrevistas con los expertos
 

Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:


Un proyecto de:
ImaginaWorks
Campus Escuela de Groovy

Groovy avanzado

Script para convertir de cbr a cbz

idecasso - martes 13/01/2009

He hecho un script, en Ubuntu, para convertir de cbr a cbz.

Los archivos cbr son rar que contienen imagenes, simplemente esta renombrada la extension a cbr, los cbz son zip renombrados. Se utilizanen programas de visualizacion de manga y comics.

 Como contienen imagenes, el archivo rar no ocupa menos que el zip. este es el script:

#!/usr/bin/env groovy

class StreamGobbler extends Thread {
    InputStream is;
    String type;
    OutputStream os;
    boolean ejecutar;    
 
    StreamGobbler(InputStream is, String type) {
        this(is, type, null);
    }
 
    StreamGobbler(InputStream is, String type, OutputStream redirect) {
        this.is = is;
        this.type = type;
        this.os = redirect;
        ejecutar = false;
    }
 
    @Override
    public void run() {
        ejecutar = true;
        
        try {
 
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            StringBuilder line = new StringBuilder();
            while (br != null && ejecutar) {
                if (br.ready()) {
                    char c = (char) br.read();
                    line.append(c);
                } else {
                    int length = line.length();
                    if (length > 0) {
                        println( line.toString())
                        line.delete(0, length);
                    }
                }
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

if(args && args.size() == 2){
  File f = new File(".")
  def origen = args[0]
  def destino = args[1]
  StreamGobbler sg;
  println "Directorio actual: ${f.canonicalPath}"
  println "Archivo origen: $origen"
  println "Archivo destino: $destino"
  File f2 = new File("${f.canonicalPath}/temp1")
  if(!f2.exists()){
      println "Creando directorio temporal"
      f2.mkdir()
      println "Extrayendo archivo a directorio temporal"
      def p = "rar e $origen ./temp1".execute()
      sg = new StreamGobbler(p.in, "OUTPUT", p.out)
      sg.start()
      p.waitFor()
      sg.ejecutar = false
      def ant = new AntBuilder()
      println "Creando zip"
      ant.zip(basedir: f2.canonicalPath, destfile: destino)
      println "Borrando directorio temporal"
      f2.eachFileRecurse{
        it.delete()
      }
      f2.delete()
  }else{
    println "Ya existe el directorio temporal"
  }
}
else{
  println "No se puede procesar la peticion"
}

 Solo hay que pasar dos paramentros, el archivo origen y el destino, deben ser de la forma /directorios/directorios/miarchivo.cbr /directorio/directorio/destino.cbz para esto tiene que estar instalado el programa rar y groovy claro, solo hay que añadir los permisos de ejecución al archivo, yo lo nombre cbr2cbz, de hecho se puede añadir en la carpeta /usr/bin para que se pueda utilizar en todo el sistema, el StreamGobbler permite mostrar la salida linea por linea y no hasta que termina la ejecucion del programa, lo tome de aqui http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1 aunque lo he modificado por que la version original solo mostraba la salida hasta terminar de ejecutarse el proceso. Aunque lo mas extraño es que la salida es mas lenta, usando el metodo de mostrar la salida hasta terminar el proceso es muchisimo mas rápido.

En verdad que las capacidades de scripting de groovy son muy buenas :D

Responder al hilo | Volver al foro "Groovy avanzado" | Volver a los foros