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.
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)
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
#!/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
Je reviens tardivement sur ta proposition car un peu “over-booké” comme tout retraité qui se respecte
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
Merci pour ton aide précieuse.
A+
Je me réponds à moi-même
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
Il suffit d’écrire le mot recherché juste après l’appel au fichier bash de recherche.
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