web-dev-qa-db-fra.com

grep pour le texte dans les fichiers * .odt ou * .doc?

Comment rechercher des fichiers * .odt ou * .doc contenant du texte dans Ubuntu?

J'utilise grep -rl <text to search for>, mais cela ne fonctionne que pour les fichiers texte.

Remarque: une solution utilisant grep (telle que searchmonkey) ne fonctionnera pas car les fichiers * .doc ou * .odt ont un format spécial.

De Comment rechercher des chaînes dans des fichiers d'un dossier?

  • Recoll veut indexer mon répertoire personnel, mais je souhaite rechercher les fichiers * .odt dans des répertoires spécifiques; Je n'arrivais pas à comprendre comment faire cela avec cet outil.
  • Searchmonkey semble être une interface graphique pour grep, et comme je l’ai déjà mentionné, grep ne fonctionne pas sur les fichiers * .doc ou * .odt.
  • Regexxer a également le même problème.

De Recherche dans les documents ODT sans les ouvrir?

  • Comme Recoll, je ne savais pas comment rechercher des fichiers * .odt dans des répertoires spécifiques avec cet outil.
4
PJ Singh

catdoc semble fonctionner de manière récursive pour les fichiers .doc dans 16.04: https://superuser.com/questions/330242/how-to-recursively-find-a-doc-file-that-contains-a- mot spécifique

Il n'y a aucune mention de .docx, vous devrez donc le découvrir vous-même.

Pour les fichiers .ods ou .odt, vous pouvez utiliser le script suivant kaibob @ ubuntuforums.org :

#!/bin/bash

find . -type f -name "*.od*" | while read i ; do
   [ "$1" ] || { echo "You forgot search string!" ; exit 1 ; }
   unzip -ca "$i" 2>/dev/null | grep -iq "$*"
   if [ $? -eq 0 ] ; then
      echo "string found in $i" | nl
   fi
done

Disons que vous l'appelez "libre-search" et que vous l'avez rendu exécutable.

Ensuite, exécuter libre-search your_string devrait lister les fichiers contenant your_string .

unzip -ca "$i" 2>/dev/null prend en charge le contenu indésirable.
grep -iq rend la recherche insensible à la casse.
nl numérote la sortie.

5
DK Bose