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 |
$ 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.