Lo + Leído
Eventos destacados
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:
- Introducción a Groovy, parte 1 (Andrés Almiray)
- Introducción a Groovy, parte 2 (Andrés Almiray)
- Introducción a Groovy, parte 3 (Andrés Almiray)
- Introducción a Grails (Material Seminario ImaginaWorks)
Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:
Groovy avanzado
Script para convertir de cbr a cbz
idecasso - martes 13/01/2009He 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
Un momento...