2007-04-10

Chercher dans des documents openoffice

find . -name "*.odt" -exec unzip -p {} content.xml \; -print0 | grep -i "picard" | grep -o '\./.*\.odt'

ça c'est pour chercher picard dans tous les documents odt en dessous du répertoire courant.

Les explications:
  • le find prend tous les fichiers se terminant par .odt
  • ensuite il execute dessus un unzip qui sort le résultat dans un pipe (-p) et qui extrait uniquement le fichier "content.xml" de l'archive zip qu'est le fichier odt (openoffice)
  • ensuite, toujours le find, affiche le nom du fichier courant sur la même ligne que le résultat du unzip (-print0 c'est un zéro)
  • ensuite le résultat de tout ça, c'est-àdire le contenu de tous les fichier odt qui sont dans l'arborescence du répertoire courant, est passé dans deux grep
  • le premier grep est pour trouver la chaine recherchée, (le -i c'Est pour case-insensitive)
  • le deuxième grep est pour n'afficher que le nom des fichier, le contenu étant assez indigeste. (il suffit d'enlever le deuxième grep pour avoir le contenu.) (le -o c'est pour ne montrer que le patern qui correspond à la recherche)
voili, voilou, pas super simple quand même.

No comments: