Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 05-11-2018 19:12:43

PapyGeo
Membre
Lieu : Essonne
Distrib. : Ubuntu 18.04
Noyau : Linux 4.15.0-38-generic
(G)UI : Gnome
Inscription : 04-11-2018

Recherche dans un fichier...

Bonsoir,
Un fichier .odt contient une phrase que je connais ("En ce qui concerne l'activité") mais je ne sais plus du tout où est ce fichier et je voudrais le retrouver.
J'envisage d'utiliser find pour obtenir la liste des fichiers .odt puis cat pour lire dedans et de filtrer avec grep pour rechercher la phrase que je connais... reste à assembler tout ça de façon cohérente et mes maigres connaissances en bash n'arrivent pas à me sortit du pétrin.
Merci pour toute aide et bonne soirée.
G

La loi du 9 décembre 1905 n'est pas la loi de séparation de l'église et de l'état mais la loi de séparation des églises et de l'état

Hors ligne

#2 05-11-2018 19:34:43

dejieres
Membre
Lieu : Moselle
Distrib. : Stretch 64 bits
Noyau : Linux 4.9.0-7-amd64
(G)UI : GNOME 3.22.2
Inscription : 07-02-2017

Re : Recherche dans un fichier...

Bonsoir et bienvenue sur DF smile

Normalement, l'outil d'indexation de Gnome indexe également le contenu des fichiers, tu peux donc utiliser l'outil 'Recherche sur cet ordinateur' pour retrouver un mot à l'intérieur d'un fichier.

Hors ligne

#3 05-11-2018 19:41:45

Nsyo
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-8-amd64
(G)UI : i3-gaps 4.16-3 branch "gaps"
Inscription : 02-08-2018

Re : Recherche dans un fichier...

Salut !

Une solution avec grep :

grep -rnw 'dossier de recherche' -e 'expression à rechercher'


-r pour une recherche récursive, dans les dossiers et sous-dossiers
-n retourne le numéro de la ligne correspondant à la recherche
-w sélectionne uniquement lignes contenant des correspondances qui forment des mots entiers
(optionnel) -i ignore les minuscules et majuscules dans l'expression à rechercher.

-e pour rechercher le motif

Selon la quantité de fichiers dans lesquels il faut fouiller, tu as le temps pour 1 café des cafés big_smile

Edit : L'homme qui tire plus vite que son ombre tongue

Dernière modification par Nsyo (05-11-2018 19:54:39)

Hors ligne

#4 05-11-2018 19:42:11

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Recherche dans un fichier...

Le mieux serait d'utiliser grep tout seul. Par exemple :

grep "/home/marmotte" -re "chocolat"



Pour le faire comme tu dit c'est vachement plus prise de tête vu que faudra lancer find puis soit itérer dans les tableau des fichiers trouvés ou via -exec, puis faire un cat | grep...
Comme on dit, on pourrait bien passer le balai avec un marteau, mais c'est pas très commode.

EDIT : grillé.

Dernière modification par otyugh (05-11-2018 19:43:04)


Agenda du libre : venez aider et vous faire aider !
Arzano Informatique : mon entreprise gagne-pain.
Ma contribution au datalove

Hors ligne

#5 05-11-2018 20:24:40

MicP
Membre
Inscription : 29-02-2016

Re : Recherche dans un fichier...

Bonjour

Je ne connais pas l'outil d'indexation et de recherche de gnome,

mais au cas où et si besoin,
installer le paquetage odt2txt

et lancer le script suivant depuis le répertoire contenant les fichiers .odt
dans lesquels la recherche de En ce qui concerne l'activité devra être faîte
(La recherche se fera aussi dans les fichiers .odt contenus dans les sous-répertoires)

#!/bin/bash
while read; do
   odt2txt "$REPLY" | grep -l "En ce qui concerne l'activité"
done <<< $(find .  -type f -name "*.odt" 2>/dev/null)

Les noms de fichiers dans lesquels le script trouvera la chaîne En ce qui concerne l'activité
seront affichés en retour.

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

J'ai donc modifié le script ci-dessus en conséquence.

Dernière modification par MicP (19-11-2018 19:41:33)

Hors ligne

#6 05-11-2018 20:57:56

phreg
Membre
Distrib. : MX Ubuntu LMDE Manjaro
Noyau : 4.9 à 4.19
(G)UI : Xfce Mate
Inscription : 02-04-2011

Re : Recherche dans un fichier...

Bonjour,
grep ne trouvera rien car un odt est compressé donc la chaîne de caractères ne s'y trouve pas en clair.
La méthode de MicP fonctionne très bien, il y manque juste la récursivité pour aller voir dans les sous répertoires.
Je pense que je vais ajouter ça au clic droit sous thunar.

Hors ligne

#7 05-11-2018 21:00:16

MicP
Membre
Inscription : 29-02-2016

Re : Recherche dans un fichier...

Bonsoir phreg

J'ai modifié mon script entre temps, (sans doute pendant que tu rédigeais le tiens).

Il y a maintenant récursivité de la recherche par find
qui va parcourir tous les sous-répertoires depuis lequel le script est lancé.

Dernière modification par MicP (05-11-2018 21:02:01)

Hors ligne

#8 05-11-2018 21:46:30

PapyGeo
Membre
Lieu : Essonne
Distrib. : Ubuntu 18.04
Noyau : Linux 4.15.0-38-generic
(G)UI : Gnome
Inscription : 04-11-2018

Re : Recherche dans un fichier...

Merci beaucoup... et hélas, si je ne trouvais pas le fichier c'est qu'il a été supprimé !
Au moins j'ai appris quelque chose !
G

La loi du 9 décembre 1905 n'est pas la loi de séparation de l'église et de l'état mais la loi de séparation des églises et de l'état

Hors ligne

#9 05-11-2018 21:52:30

phreg
Membre
Distrib. : MX Ubuntu LMDE Manjaro
Noyau : 4.9 à 4.19
(G)UI : Xfce Mate
Inscription : 02-04-2011

Re : Recherche dans un fichier...

Bonsoir MicP,
effectivement, maintenant c'est impecable. Il ne me reste qu'à passer en variable la chaîne cherchée pour terminer.

Edit : c'est fait

#!/bin/bash
echo -n "Chaine à chercher dans les fichiers *.odt : "
read chaine
while read; do
   odt2txt "$REPLY" | grep $chaine 1>/dev/null && echo "$REPLY"
done <<< $(find . -name "*.odt" 2>/dev/null)

Dernière modification par phreg (05-11-2018 22:02:43)

Hors ligne

#10 05-11-2018 22:25:50

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Recherche dans un fichier...

-Les solutions données plus haut son extremement lentes entre deux essais.

Alternativement un outil sans ce défaut et graphique (mais assez moche) fait des merveilles pour chercher une chaîne de caractère. Je l'ai beaucoup utilisé pour ma grand mère qui écrit beaucoup mais qui perd ses pavés. Ça lit les .odt et tout, pas de souci.

apt install recoll


Après une étape d'indexation, il trouve tout instantanément. Pratique quand on tâtonne.

Dernière modification par otyugh (05-11-2018 22:27:45)


Agenda du libre : venez aider et vous faire aider !
Arzano Informatique : mon entreprise gagne-pain.
Ma contribution au datalove

Hors ligne

#11 05-11-2018 23:01:20

empanada
Membre
Distrib. : Debian 9 (Stretch)
Noyau : 4.9.0-7-amd64
(G)UI : LXDE
Inscription : 19-09-2018

Re : Recherche dans un fichier...

otyugh a écrit :

-Les solutions données plus haut son extremement lentes entre deux essais.

Alternativement un outil sans ce défaut et graphique (mais assez moche) fait des merveilles pour chercher une chaîne de caractère. Je l'ai beaucoup utilisé pour ma grand mère qui écrit beaucoup mais qui perd ses pavés. Ça lit les .odt et tout, pas de souci.

apt install recoll


Après une étape d'indexation, il trouve tout instantanément. Pratique quand on tâtonne.


Ehhhh, très bonne otyugh!!! yes.gif Il n'y a pas des points-choco pour otyugh?


"blues are the roots and the other musics are the fruits" . Willie Dixon

Hors ligne

#12 06-11-2018 01:24:28

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 9 (stretch) 64 bits + backports
Noyau : 4.9.65-3+deb9u2
(G)UI : gnome
Inscription : 21-10-2008

Re : Recherche dans un fichier...

empanada a écrit :

Il n'y a pas des points-choco pour otyugh?


En lisant attentivement tous les cas de points choco df, désolé, y'a pas pour otyugh !
Cependant, un petit tuto dans le wiki serait peut-être le bienvenu pour recoll ? smile


"Théo et Adama te rappellent pourquoi Zyed et Bouna couraient…"
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#13 06-11-2018 01:31:23

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Recherche dans un fichier...

Ce logiciel est vraiment pas joli malheureusement, je le metterai pas forcément entre toutes les mains, c'est con mais l'ergonomie est vraiment un moins dans çui-ci.

Agenda du libre : venez aider et vous faire aider !
Arzano Informatique : mon entreprise gagne-pain.
Ma contribution au datalove

Hors ligne

#14 06-11-2018 08:00:31

phreg
Membre
Distrib. : MX Ubuntu LMDE Manjaro
Noyau : 4.9 à 4.19
(G)UI : Xfce Mate
Inscription : 02-04-2011

Re : Recherche dans un fichier...

Bonjour,
effectivement, recoll semble capable de plein de choses.
Par contre, quel catastrophe d'ergonomie !
J'ai tenté une recherche d'un mot utilisé dans plusieurs odt et leur export en pdf.
Résultat : recoll est incapable de trouver dans un odt, dans les pdf c'est ok.

Hors ligne

#15 06-11-2018 09:09:15

dejieres
Membre
Lieu : Moselle
Distrib. : Stretch 64 bits
Noyau : Linux 4.9.0-7-amd64
(G)UI : GNOME 3.22.2
Inscription : 07-02-2017

Re : Recherche dans un fichier...

Juste pour ajouter un grain de sel final...

Sous Gnome, c'est tracker qui indexe les fichiers et leur contenu. En ligne de commande, on peut faire quelque chose du genre :

tracker search LeTexteATrouver



L'avantage par rapport à recoll, c'est qu'il n'y a pas besoin d'une nouvelle indexation, puisqu'elle est déjà faite.

Hors ligne

#16 06-11-2018 10:18:41

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Recherche dans un fichier...

phreg a écrit :

Résultat : recoll est incapable de trouver dans un odt, dans les pdf c'est ok.


Ma grand-mère travaille sur des .odt, donc ça marche forcément dans son cas. Par contre vu qu'elle est sous jessie comme moi, peut-être que le format .odt a évolué depuis rendant recoll obsolète dès stretch ?
J'ai pas meilleur hypothèse.

Description: recherche personnelle de texte pur avec une interface graphique Qt
Ce paquet est un moteur de recherche personnel pour du texte uniquement. Il
est basé sur un moteur très solide (Xapian) pour lequel il fournit une
interface facile à utiliser et riche en fonctionnalités.
.
Caractéristiques :
  — interface Qt ;
  — prises en charge des types de document suivants (et de leurs versions
     compressées) :
   —  nativement texte, html, fichiers OpenOffice, maildir et mailbox
     (courrier Mozilla et IceDove) avec leurs pièces jointes, fichiers
     journaux de pidgin,
   — avec des assistants extérieurs :pdf (pdftotext), postscript
     (ghostscript), msword (antiword), excel, ppt (catdoc), rtf (unrtf)  ;
  — fonctions de requête puissantes, avec recherches booléennes,
     expressions, filtres suivant le type de fichier et d’arbre de
     répertoires ;
  — prise en charge de multiples tables de caractères, traitement interne,
     et l’enregistrement utilise l’Unicode UTF-8 ;
  — recherche de radical réalisée au moment de la requête (possibilité de
     changer le langage de la recherche après indexation) ;
  — installation facile ; pas de démon de base de données, de serveur web ou
     de langage exotique nécessaires ;
  — indexation faite soit comme un processus léger à l’intérieur de
     l’interface graphique, soit comme un programme externe de tâche cron.

Dernière modification par otyugh (06-11-2018 10:19:42)


Agenda du libre : venez aider et vous faire aider !
Arzano Informatique : mon entreprise gagne-pain.
Ma contribution au datalove

Hors ligne

#17 06-11-2018 11:20:35

phreg
Membre
Distrib. : MX Ubuntu LMDE Manjaro
Noyau : 4.9 à 4.19
(G)UI : Xfce Mate
Inscription : 02-04-2011

Re : Recherche dans un fichier...

Par contre vu qu'elle est sous jessie comme moi, peut-être que le format .odt a évolué depuis rendant recoll obsolète dès stretch ?


Je viens de faire l'essai avec xubuntu, libreoffice 6.0, pas sous Debian.
A l'essai d'ouverture d'un odt j'ai effectivement une erreur :

Impossible de traduire le document en représentation interne pour application/vnd.sun.xml.writer
Programmes filtres externes manquants: python:libxml2/python:libxslt1


Je vérifierai sous Debian, Ubuntu diverge pas mal.

Hors ligne

#18 06-11-2018 12:29:44

MicP
Membre
Inscription : 29-02-2016

Re : Recherche dans un fichier...

phreg a écrit :

…Il ne me reste qu'à passer en variable la chaîne cherché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)




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

J'ai donc modifié le script ci-dessus en conséquence.

Dernière modification par MicP (19-11-2018 19:41:05)

Hors ligne

#19 06-11-2018 15:42:26

phreg
Membre
Distrib. : MX Ubuntu LMDE Manjaro
Noyau : 4.9 à 4.19
(G)UI : Xfce Mate
Inscription : 02-04-2011

Re : Recherche dans un fichier...

MicP,
tu passes en paramètre et je demandais la saisie après lancement.
C'est quasi pareil en console par contre, pas pour une action personnalisée de thunar (qui n'ouvre pas de console).
Donc j'ai configuré l'action comme suit

nom : Chercher texte dans ODT
commande : xterm -hold -e "bash /home/phreg/tools/chercheodt.sh" &
condition d'apparition : répertoire
 


Avec chercheodt.sh qui est :

#!/bin/bash
echo -n "Chaine à chercher dans les fichiers *.odt : "
read chaine
while read; do
   odt2txt "$REPLY" | grep $chaine 1>/dev/null && echo "$REPLY"
done <<< $(find . -name "*.odt" 2>/dev/null)


Au lancement depuis thunar (clic droit et choix de Chercher texte dans ODT), ça ouvre donc une console (xterm) qui lance le script de recherche et attend la saisie de la chaîne à trouver, donne la liste et attend jusquà fermeture.
J'ai laissé le script dans mon home, il serait mieux ailleurs si le PC est multi-utilisateurs.

Hors ligne

#20 06-11-2018 17:12:55

MicP
Membre
Inscription : 29-02-2016

Re : Recherche dans un fichier...

Ok, merci pour l'explication très claire,
je n'avais pas compris que tu voulais que le script soit interactif
et permette ainsi la saisie de la chaîne de caractères à rechercher.

Hors ligne

#21 06-11-2018 17:56:31

phreg
Membre
Distrib. : MX Ubuntu LMDE Manjaro
Noyau : 4.9 à 4.19
(G)UI : Xfce Mate
Inscription : 02-04-2011

Re : Recherche dans un fichier...

J'aime bien ces actions personnalisée, ça donne un sacré confort. De toutes manières, le plus difficile était dans ton bout de code avec le odt2txt que je ne connaissais pas. Merci

Hors ligne

#22 08-11-2018 11:37:46

MicP
Membre
Inscription : 29-02-2016

Re : Recherche dans un fichier...

@phreg : Dans le script contenu dans tes messages #9 et #19
il faudrait encadrer la variable $chaine par des double-guillemets

ce qui donnerait :

#!/bin/bash
echo -n "Chaine à chercher dans les fichiers *.odt : "
read chaine
while read; do
   odt2txt "$REPLY" | grep -l "$chaine"
done <<< $(find . -type f -name "*.odt" 2>/dev/null)




EDIT :
Il me semblait bien aussi que j’oubliais quelques choses,
c’était l’option -l de la commande grep
et l'option -type f de la commande find
J'ai donc modifié le script ci-dessus en conséquence.

Dernière modification par MicP (19-11-2018 19:40:52)

Hors ligne

#23 08-11-2018 12:46:33

phreg
Membre
Distrib. : MX Ubuntu LMDE Manjaro
Noyau : 4.9 à 4.19
(G)UI : Xfce Mate
Inscription : 02-04-2011

Re : Recherche dans un fichier...

Bonjour MicP,

l faudrait encadrer la variable $chaine par des double-guillemets

ça fonctionnait très bien pendant mes tests mais ils n'étaient pas assez sérieux !
Si la chaîne à chercher contient un espace grep n'aime pas trop ce manque de guillemets effectivement.

Hors ligne

#24 11-11-2018 12:30:41

Jkart
Membre
Distrib. : DFLinux stretch 9.5
Noyau : 4.9.0-8-686
(G)UI : Xfce
Inscription : 16-12-2017

Re : Recherche dans un fichier...

Bonjour,
En résumé et pour faciliter la vie des débutant comme moi...

Créer le script ChercheODT.sh avec votre éditeur de texte, genre Mousepad. Vous pouvez recopier ou copier/coller le texte ci-dessous. Attention le copier/coller peut provoquer des messages d'erreurs liés à des paramétrage du texte. Ici, j'ai vérifié, à priori, cela fonctionne.

#!/bin/bash
echo -n "Chaine à chercher dans les fichiers *.odt : "
read chaine
while read; do
odt2txt "$REPLY" | grep "$chaine" 1>/dev/null && echo "$REPLY"
done <<< $(find . -name "*.odt" 2>/dev/null)



Installer le paquet odt2txt en ligne de commande ou avec synaptic

Ouvrir un terminal (click droit) dans le répertoire où l'on recherche son fichier .odt et où le script ChercheODT.sh a été positionné. La recherche se fera aussi dans les fichiers .odt contenus dans les sous-répertoires.

bash ChercheODT.sh



Indiquer un fragment de texte contenu dans le fichier .odt recherché
Enter
Le(s) nom(s) du fichier recherché s'affiche
Cordialement

Dernière modification par Jkart (11-11-2018 12:31:14)


Laptop : HP Pavilion dv7 note book PC
Ram 3 giga   Dual boot DF Linux / Windows Vista
Intel(R) Core (TM)2 Duo CPU T5800 2 GHertz
Nvidia Geforce 9600 GT

Hors ligne

#25 19-11-2018 19:11:02

MicP
Membre
Inscription : 29-02-2016

Re : Recherche dans un fichier...

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

J'ai donc modifié mes script ci-dessus en conséquence.

Dernière modification par MicP (19-11-2018 19:40:37)

Hors ligne

Pied de page des forums