Hace unos días se planteaba en uno de los equipos de trabajo una duda muy concreta: cómo buscar una cadena de texto en cientos de archivos de OpenOffice de manera eficiente.Un fichero odt no es más que un conjunto de ficheros xml comprimidos en formato zip por lo que, afortunadamente, se pueden utilizar herramientas diseñadas para trabajar con texto plano una vez que se descomprime el fichero binario. Sin embargo, los ficheros xml contenidos no están pensados para ser interpretados por personas, sino por ordenadores, por lo que es necesario un proceso previo del contenido. La utilidad odt2txt (disponible en los repositorios de las principales distribuciones) se encarga de ello y, a partir de un fichero que se pasa como parámetro, escribe por la salida estándar sus contenidos, dándoles un formato más amigable. En Ubuntu se puede instalar mediante un simple
sudo apt-get install odt2txt
Una vez que está instalada, ya se puede integrar en distintos scripts que hagan lo que necesitemos. Por ejemplo, para localizar los ficheros odt que contienen una cadena de texto dentro de una carpeta y sus subdirectorios podemos utilizar el siguiente:
#!/bin/sh
for i in `find . -name *.odt`; do
if [ `odt2txt "$i" | grep -iE "$@" | wc -l` -gt 0 ]; then
echo "Texto encontrado en $i"
fi
done
que se utilizaría de la siguiente manera:
$ ./find_in_odt.sh "cadena de texto a buscar"
El script anterior cuenta con la limitación de que no está preparado para funcionar con carpetas cuyo nombre contiene espacios. Otra opción podría ser la búsqueda de diferencias entre dos ficheros:
#!/bin/sh
odt2txt $1 > tempfile1
odt2txt $2 > tempfile2
diff -u tempfile1 tempfile2
rm tempfile1 tempfile2
Ejecutable como (recomiendo instalar colordiff para ser usado en lugar del diff tradicional):
$ ./odtdiff.sh fichero1a.odt fichero1b.odt
Más aún: podemos integrar odt2txt con sistemas de control de versiones como Git (usado por el kernel de Linux, Gnome, Android o Ruby on Rails entre otros) para conseguir integración con ficheros de OpenOffice (útil para ver los cambios entre las diferentes versiones en el repositorio). Para ello, basta con añadir al archivo de configuración .gitconfig (presente en el directorio de usuario en Linux y OSX)
[diff "odf"]
Y luego, dentro del repositorio del proyecto, crear o modificar el archivo .git/info/attributes para que contenga:
textconv=odt2txt
*.ods diff=odf
*.odt diff=odf
*.odp diff=odf
Espero que alguno de estos consejillos os sirva de utilidad, ¡un saludo!