Chercher un mot dans 100 fichiers LibO Writer odt

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.

Bonjour,

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

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"
1 J'aime

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
1 J'aime

Super !
Merci à vous.

A+

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 systemctl :relaxed:
Il suffit d’écrire le mot recherché juste après l’appel au fichier bash de recherche.

Merci
Grace à vous j’avance

Bonjour à tous,
Je cherche un mot dans des fichiers .odt, mais sous mac. Qui saurait comment faire ? dans le terminal ? Merci d’avance pour vos réponses !

Ouvre ton propre fil de discussion, si tu ne comprends pas, normalement si le script bash est POSIX il est exécutable tel quel sur toute base Unix, MACOS, BSD, GNU/Linux :wink:

Merci Clochette. J’ai essayé les commandes ci-dessus en vain dans le Terminal…
Quand à ouvrir un fil de discussion, cela dépasse mes compétences…

salut
tu cliques sur créer un sujet , tu mets un titre, tu choissi programmation et c’est parti

Bonjour


Tu cliques en haut et à gauche sur debian-fr.org :
Capture d’écran_2023-03-27_21-43-12


Ensuite, en haut et à droite, tu cliques sur + Créer un sujet
Capture d’écran_2023-03-27_21-56-21


Tu pourras entrer le titre que tu veux donner à ton nouveau fil de discussion :
Capture d’écran_2023-03-27_21-46-52


Puis tu pourras faire apparaître la liste des catégories existantes
en cliquant sur Sans catégorie ▾ :
Capture d’écran_2023-03-27_21-48-47


Par exemple, clique dans la liste sur la catégorie Programmation :
Capture d’écran_2023-03-27_21-50-18


tu rédiges ton message :
Capture d’écran_2023-03-27_21-54-44


et tu valides ton message en cliquant en bas et à gauche sur le bouton + Créer le sujet

1 J'aime