Chercher un mot dans 100 fichiers LibO Writer odt


#1

Bonjour,

Je veux chercher un mot précis dans une centaine de fichiers LibreOffice Writer .odt.
Il est pénible d’ouvrir chaque fichier puis de lancer la recherche sachant que ce mot n’est probablement contenu que dans une poignée de ces fichiers.

Les fichiers en questions sont répartis dans quelques dossiers. La recherche serait lancée dans chacun des dossiers séparément.
Comment rédiger une telle demande ?

J’ai trouvé ceci :

Ce que je souhaite obtenir est la liste des noms des fichiers qui contiennent le mot recherché.

Je suis sous Debian 9 mise à jour automatiquement ainsi que LibO Version: 5.2.7.2 - Build ID: 1:5.2.7-1+deb9u4.

Merci.


#2

Bonjour,

Ce script, à adapter, sera certainement très utile :


#3

Bonjour Papy_Octet

il faudrait d’abord installer le paquetage odt2txt
puis tu pourras créer et lancer le script suivant
qui va afficher la liste des fichiers qui contiennent
la chaîne de caractères recherchée

#!/bin/bash

# Description :
#   Recherche une chaîne de caractères dans tous les fichiers "*.odt " (Writer de Libre Office)
#    contenus dans un répertoire et tous ses sous-répertoires.

# Syntaxe :
#   nomDuScript.sh "nom du répertoire" "chaîne à rechercher"

while read; do
    odt2txt "$REPLY" | grep -l "$2"
done <<< $(find "$1" -type f -name "*.odt" 2>/dev/null)

Extrait de ce fil de discussion


Ou alors,
sans prendre en compte les sous-répertoires du répertoire de recherche :

#!/bin/bash

# Description :
#   Recherche une chaîne de caractères dans tous les fichiers "*.odt " (Writer de Libre Office)
#    contenus dans un répertoire mais PAS dans ses sous-répertoires.

# Syntaxe :
#   nomDuScript.sh "nom du répertoire" "chaîne à rechercher"

while read; do
    odt2txt "$REPLY" | grep -l "$2"
done <<< $(find "$1" -maxdepth 1 -type f -name "*.odt" 2>/dev/null)

EDIT :
Il me semblait bien aussi que j’oubliais quelque chose,
c’était l’option -l de la commande grep
et l’option -type f de la commande find

Alors, toujours avec odt2txt mais en une seule ligne de commandes
lancée depuis le répertoire contenant les fichiers .odt

odt2txt *.odt | grep -l "Chaîne à rechercher"

#4

Salut
Le format odt ne s’explore pas comme du mode texte

créer un fichier libsearch.sh

y mettre

#!/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

quand l’outil est dans le même dossier que les fichiers .odt, ça à l’air de fonctionner
Exemple je cherche la chaine systemctl

~/Documents/Linux$ bash libsearch.sh systemctl
     1	string found in ./wifi-poweroff.odt
     1	string found in ./plymouth.odt
     1	string found in ./journalisation-messages-kernel.odt
     1	string found in ./urandom.odt
     1	string found in ./err-noyau-418.odt
     1	string found in ./snap.odt
     1	string found in ./Mon-bluetooth.odt
     1	string found in ./iio-service-delay.odt
     1	string found in ./arret-clavier.odt
     1	string found in ./Avast.odt
     1	string found in ./desactivation-bluetooth.odt
     1	string found in ./snap-core.odt
     1	string found in ./apt-update-perso-cr.odt
     1	string found in ./Apparmor-disable-profile.odt
     1	string found in ./apparmor.odt
     1	string found in ./Anacron-timestamp.odt
     1	string found in ./anbox-desactivation-service.odt
     1	string found in ./Suppression-avahi-daemon.odt
     1	string found in ./anbox-deuxieme.odt
     1	string found in ./update.automatique.odt
     1	string found in ./desactivation-services-evolution.odt
     1	string found in ./smartmontools.odt
     1	string found in ./gerbera.odt
     1	string found in ./Pulseaudio.odt
     1	string found in ./dnsmasq.odt
     1	string found in ./journalctl-err.odt
     1	string found in ./comparaison-boot.odt
     1	string found in ./suivi-température.odt
     1	string found in ./ntpq.odt
     1	string found in ./update-perso-v2.odt
     1	string found in ./Sophos-anti-virus.odt
     1	string found in ./apt-service.odt
     1	string found in ./powertop-systemd.odt
     1	string found in ./alsa-restore-2.odt
     1	string found in ./bluetooth.odt
     1	string found in ./espeakup.odt
     1	string found in ./sppedtest-en-commande.odt
     1	string found in ./réglages-son.odt
     1	string found in ./how-to-systemd.odt

#5

Super !
Merci à vous.

A+


#7

Bonjour grandtoubab,

Je reviens tardivement sur ta proposition car un peu “over-booké” comme tout retraité qui se respecte :wink:
Dans le code que tu propose, à quel moment et où dois-je introduire le mot que je veux rechercher dans les fichiers odt ?

Ou peut-être est-il possible que ce programme me demande un ou des mots avant de démarrer la recherche ?
Je suis une véritable bille dans l’écriture de fichiers bash :relaxed::relaxed:

Merci pour ton aide précieuse.
A+

Je me réponds à moi-même :wink:
Quand je dis que je suis une bille … la réponse à cette question est dans la réponse de grandtoubab :
Linux$ bash libsearch.sh systemct :relaxed:
Il suffit d’écrire le mot recherché juste après l’appel au fichier bash de recherche.