Como sabéis, los ficheros ODT de LibreOffice son simples ficheros .zip . Dentro de ellos, encontramos distintos archivos xml, gráficos incrustados, etc. Un ejemplo:
$ unzip -l herramientas.odt Archive: herramientas.odt Length Date Time Name --------- ---------- ----- ---- 39 2012-07-20 12:00 mimetype 997 2012-07-20 12:00 meta.xml 8798 2012-07-20 12:00 settings.xml 12512 2012-07-20 12:00 content.xml 7003 2012-07-20 12:00 Thumbnails/thumbnail.png 22 2012-07-20 12:00 layout-cache 899 2012-07-20 12:00 manifest.rdf 0 2012-07-20 12:00 Configurations2/popupmenu/ 0 2012-07-20 12:00 Configurations2/images/Bitmaps/ 0 2012-07-20 12:00 Configurations2/toolpanel/ 0 2012-07-20 12:00 Configurations2/statusbar/ 0 2012-07-20 12:00 Configurations2/toolbar/ 0 2012-07-20 12:00 Configurations2/progressbar/ 0 2012-07-20 12:00 Configurations2/menubar/ 0 2012-07-20 12:00 Configurations2/floater/ 0 2012-07-20 12:00 Configurations2/accelerator/current.xml 12033 2012-07-20 12:00 styles.xml 1185 2012-07-20 12:00 META-INF/manifest.xml --------- ------- 43488 18 files |
El problema viene cuando tienes una carpeta llena de ficheros .ODT y quieres buscar un texto en concreto en todos ellos. Al tratarse de ficheros comprimidos, no vale con usar ni el comando strings ni el comando grep, porque no encontrará lo que buscas.
¿Solución? Convertir los .odt a texto con el comando odt2txt (funciona también para .odg y otros formatos):
for i in *.odt; do echo $i; echo "*************"; odt2txt $i | grep -i cadena_de_texto_a_buscar; done
Ese bucle for recorre todos los ficheros con extensión .odt, los convierte a texto (no genera ficheros nuevos, la conversión se realiza hacia la salida estándar) y los pasa por un pipe a grep, que realiza la búsqueda. El echo $i con los *** sirve para remarcar el nombre del fichero en el que se encontró la cadena.
Gracias, excelentes todos los tips que publican…
Me acabas de ahorrar un buen curro, y colgarme una medalla, gracias!!