Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/10/2017, à 13:07

moko138

Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Ce mini-tutoriel fait suite à ./viewtopic.php?id=977311
et doit beaucoup à Sciensous et à pingouinux. Merci à eux !  smile


Installer d'abord odt2txt
[ 15 kio (100 kio si la dépendance libzip2 est aussi à installer) ]

sudo apt-get update && sudo apt-get install odt2txt

N.B. 1 : les guillemets doubles sont importants, ça ne marche pas avec 'a. dupont est au 1er'.
N.B. 2 : l'exploration inclut les sous-répertoires du répertoire courant.
N.B. 3 : Pour une recherche à partir de la racine et/ou portant sur des fichiers appartenant à root, commencer la commande par cd / ; sudo
  Bien patienter jusqu'au retour du prompt !


Cas des fichiers .ODT
Si on cherche des fichiers contenant « A. Dupont est au 1er » ou « Limoges » :

find . -iname "*.odt" -exec sh -c  'odt2txt "{}" | grep -iqE "a. dupont est au 1er|limoges" && echo "{}"' \;

ou

cd / ; sudo find . -iname "*.odt" -exec sh -c  'odt2txt "{}" | grep -iqE "a. dupont est au 1er|limoges" && echo "{}"' \;

Cas des fichiers .ODS
Les formules [ 13/05/2017 ou =SOMME($Page1.G54;($Page2.G20:G51)) ] et leurs résultats [ 13-mai-2017 ou 197,70 € ] ne semblent pas pris en compte. Mais pour peu qu'une case contienne du texte ou un nombre sans formule, par exemple « rue de Budapest » ou « 197,70 », ceci fonctionne :

find . -iname "*.ods" -exec sh -c  'odt2txt "{}" | grep -iqE "197.7|rue de budapest" && echo "{}"' \;

ou

cd / ; sudo find . -iname "*.ods" -exec sh -c  'odt2txt "{}" | grep -iqE "197.7|rue de budapest" && echo "{}"' \;

Notez bien que vous devez remplacer la virgule par un point et ne pas mettre de zéro à la fin des décimales, même si votre fichier affiche "197,70".

Edit 1 : ajout de l'option -E derrière grep

Dernière modification par moko138 (Le 28/10/2017, à 10:16)


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#2 Le 26/10/2017, à 13:07

moko138

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

[réserve]


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#3 Le 26/10/2017, à 15:17

Toobuntu

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Le paquet/programme loook au look vieillot
et recoll sait le faire aussi.

Dernière modification par Toobuntu (Le 26/10/2017, à 15:19)

#4 Le 26/10/2017, à 16:21

erresse

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Il y a aussi "DocFetcher" qui sait faire des recherches dans différents formats de documents, mais... c'est une application graphique.
Peut-être moko veut-il faire ce travail en mode terminal ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#5 Le 26/10/2017, à 16:22

Toobuntu

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Oui peut être smile

#6 Le 26/10/2017, à 17:47

Compte anonymisé

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Ca peut être utile, par contre les commandes me paraissent alambiquées

cd / ; sudo find . 

là tu changes de dossier puis tu demandes à find de chercher dans le dossier courant. Tu peux très bien faire find /

utiliser find pour appeller sh, il serait pas plus pratique de faire tout en bash ?

ensuite pourquoi le limiter au fichiers ODT ?

odt2txt est un raccourci de unoconv

tu remplaces

odt2txt par unoconv -f txt --stdout et ton script devient compatible pour tout les formats lisibles par libreoffice

#7 Le 27/10/2017, à 22:47

moko138

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Merci de contribuer !  smile

Pour loook

apt-cache show loook
N: Impossible de trouver le paquet loook

Et chercher  site:doc.ubuntu-fr.org loook  dans startpage n'est pas plus probant.
  - -

Pour le mode terminal
Dans la mesure où il s'agit d'aider via le forum, oui puisque
ça doit fonctionner même si le demandeur et l'aidant n'ont pas le même environnement,
et que ça permet d'avoir des retours précis et détaillés, plus clairs que

Alors, dans le volet de gauche, troisième champ - c'est bien ça dont tu parles ? - il y a plein de trucs qui défilent... ben non, il n'y est pas, je crois.

qui font tellement avancer le schmilblick.

  - -

Anonyme68 a écrit :

utiliser find pour appeller sh, il serait pas plus pratique de faire tout en bash ?

Tout ce que tu veux, pourvu
- que ça marche
- et que ce soit utilisable pour aider le non-spécialiste en panne !

  - -
Pour unoconv

apt-cache show unoconv
Description-en: converter between LibreOffice document formats
 This package provides a commandline utility which can convert from
 any document format that LibreOffice can import to any document format
 it can export. It uses LibreOffice's UNO bindings for non-interactive
 conversion of documents.
 .
 Supported document formats include Open Document format, MS Word, MS
 Office Open/MS OOXML, PDF, HTML, XHTML, RTF, Docbook, and more.

Prometteur !

Conflicts: odt2txt

Bon à savoir, c'est l'un ou l'autre.
Quoique... :

dpkg -l | grep odt2txt
ii  odt2txt

n'empêche pas :

sudo apt-get install unoconv
Les paquets supplémentaires suivants seront installés : 
  python-uno
Paquets suggérés :
  libreoffice
Paquets recommandés :
  libreoffice-java-common
Les NOUVEAUX paquets suivants seront installés :
  python-uno unoconv          ## environ 250 kio

.
Testons :

...:/$ sudo find . -iname "*.ods" -exec sh -c  'unoconv -f txt --stdout "{}" | grep -iq "197.7|budapest" && echo "{}"' \;
unoconv: UnoException during conversion in <class '__main__.com.sun.star.task.ErrorCodeIOException'>: 
ERROR: The provided document cannot be converted to the desired format. (code: 3088)
3088
unoconv: UnoException during conversion in <class '__main__.com.sun.star.task.ErrorCodeIOException'>: 
ERROR: The provided document cannot be converted to the desired format. (code: 3088)
3088
...:/$

Et en remplaçant -iname *.ods   par   *.*

sudo find . "*.*" -exec sh -c  'unoconv -f txt --stdout "{}" | grep -iq "197.7|budapest" && echo "{}"' \;

j'interromps après plus d'une minute d'analyse retournant invariablement :

unoconv: UnoException during conversion in <class '__main__.com.sun.star.lang.IllegalArgumentException'>: Unsupported URL <file:///usr/include/linux>: ""
Traceback (most recent call last):
  File "/usr/bin/unoconv", line 790, in <module>
    main()
  File "/usr/bin/unoconv", line 769, in main
    convertor.convert(inputfn)
  File "/usr/bin/unoconv", line 679, in convert
    error("ERROR: The provided document cannot be converted to the desired format. (code: %s)" % e.ErrCode)
  File "/usr/lib/python2.7/dist-packages/uno.py", line 337, in _uno_struct__getattr__
    return __builtin__.getattr(self.__dict__["value"],name)
AttributeError: ErrCode

Il y a, je suppose, une astuce complémentaire à trouver, mais je ne comprends pas le message d'erreur.


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#8 Le 27/10/2017, à 22:56

Roschan

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

parce que juste Nautilus ça ne suffit pas ?

Hors ligne

#9 Le 27/10/2017, à 23:01

Toobuntu

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

https://packages.ubuntu.com/fr/xenial/loook roll

tu n'as pas activé les dépôts universe ?

Nautilus cherche dans le contenu des fichiers ?

Dernière modification par Toobuntu (Le 27/10/2017, à 23:05)

#10 Le 28/10/2017, à 08:43

Compte anonymisé

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

unoconv revoie une erreur si il arrive pas à convertir le fichier (ce qui peut arriver pour diverses raisons), je propose de rajouter un 2> /dev/null pour éviter les désagréments

Je te proposes celle là en remplacement :

find \( -iname '*.odt' -o -iname '*.pdf' -o -iname '*.doc' -o -iname '*.docx' -o -iname '*.rtf' \) -exec sh -c  'unoconv -f txt --stdout "{}" | grep -iq "a. dupont est au 1er|limoges" && echo "{}"' \; 2> /dev/null

au temps pour moi, odt2txt c'est un raccourci de unoconv mais aussi un programme à part entière, chez moi j'avais unoconv et du coup j'avais un odt2txt mais qui avait rien à voir avec celui de ta commande #1

#11 Le 28/10/2017, à 09:40

moko138

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Merci !
Test en cours depuis 44 minutes, sans message d'erreur  smile
... ni retour du prompt  sad
Dans top, soffice.bin grimpe à 90-100% : emballé et figé ?
La température de /sys/class/thermal/thermal_zone0/ monte d'une vingtaine de degrés

sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +65.0°C  (crit = +90.0°C)

Je croyais jusqu'à présent que c'était la carte graphique, mais là, je ne vois pas.

Je vais recommencer
- en rajoutant -o -iname '*.ods' (puisque c'est un .ods que j'ai fabriqué pour les 1ers tests)
- en retirant provisoirement d'autres extensions, pour gagner du temps.

Questions :
Est-ce un simple oubli ou volontaire, qu'il n'y ait pas -o devant le premier -iname ?
Pour obtenir la sortie dans un fichier,
- où placer > ~/sortie.txt ?
- faut-il supprimer --stdout ?

  - -

Ajout :
Lancé à 10h46

sudo find \( -iname '*.odt' -o -iname '*.ods' \) -exec sh -c  'unoconv -f txt --stdout "{}" | grep -iq "197.7|budapest" && echo "{}"' \; 2> /dev/null

soffice.bin, cette fois, navigue entre 1 et 24% de %CPU.

Dernière modification par moko138 (Le 28/10/2017, à 09:50)


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#12 Le 28/10/2017, à 10:34

Compte anonymisé

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Test en cours depuis 44 minutes, sans message d'erreur  smile
... ni retour du prompt  sad

libreoffice a peut-être du mal sur un fichier, par exemple je suppose que les PDF sont pas forcément une bonne idée

- en rajoutant -o -iname '*.ods' (puisque c'est un .ods que j'ai fabriqué pour les 1ers tests)

les fichiers issue d'un tableur ne peuvent pas être converti en "txt" (libreoffice via l'interface graphique n'y arrive pas non plus). On pourrait les convertir par exemple en "csv", mais en état ça fonctionnera pas (cf unoconv --show pour voir les formats et dans lequel la conversion est possible)

Est-ce un simple oubli ou volontaire, qu'il n'y ait pas -o devant le premier -iname ?

-o c'est le "ou" de la syntaxe de find, et les parenthèses c'est pour les priorités. Il y a pas besoin de "ou" avant le premier argument. (cf paragraphe Opérateurs de manuel de find)

Pour obtenir la sortie dans un fichier,
- où placer > ~/sortie.txt ?
- faut-il supprimer --stdout ?

la sortie par défaut (donc sans --stdout) c'est le nom du fichier avec la nouvelle extension spécifié avec -f

exemple : monfichier.odt deviendra monfichier.txt

soffice.bin, cette fois, navigue entre 1 et 24% de %CPU.

libreoffice est surement plus lourd que ton premier programme smile

Dernière modification par Compte anonymisé (Le 28/10/2017, à 10:36)

#13 Le 22/01/2018, à 01:31

cristobal78

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

bjr à tous

super cette petite ligne de commande  smile

Cependant si elle marche très bien chez moi avec un seul mot par exemple avec :

a. dupont est au 1er

elle ne marche pas avec la condition OU symbolisée, si j'ai bien compris, par le |  entre les 2 mots :

"a. dupont est au 1er|limoges"

Pourquoi donc ?


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#14 Le 22/01/2018, à 04:13

moko138

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Merci de donner des retours complets.
  Un retour complet doit contenir toutes les lignes,
depuis celle, entière, de la commande
jusqu'à la ligne attendant la commande suivante
, exemple :

moi@mon-pc~$: ma-commande
son retour
moi@mon-pc~$:

Faute de quoi, il manque souvent à ceux qui tentent de t'aider des éléments essentiels.

(Plus de détails dans ce message-ci Retour utilisable de commande.)


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#15 Le 22/01/2018, à 05:57

moko138

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Merci de montrer aussi :

dpkg -l | odt2txt

Pour chercher à la fois les fichiers .ODT et les fichiers .ODS
contenant  « 197,70 » ou « A. Dupont est au 1er » ou « Limoges » ou « rue de Budapest », ceci :

cd / && sudo find \( -iname '*.odt' -o -iname '*.ods' \) -exec sh -c 'odt2txt "{}" | grep -iqE "197.7|a. dupont est au 1er|limoges|rue de budapest" && echo "{}"' \;

fonctionne et affiche les chemins des fichiers

moko@mon-pc:~$ cd / && sudo find \( -iname '*.odt' -o -iname '*.ods' \) -exec sh -c 'odt2txt "{}" | grep -iqE "197.7|a. dupont est au 1er|limoges|rue de budapest" && echo "{}"' \;
./media/(...)/****_2017-05-29.ods
./Data500/(...)/****_2017-05-29.ods
./etc/test.odt
./home/moko/Bureau/test.odt
moko@mon-pc:/$

On obtient en plus la correspondance avec les contenus recherchés, en remplaçant l'option -q de grep par l'option -s :

moko@mon-pc:~$ cd / && sudo find \( -iname '*.odt' -o -iname '*.ods' \) -exec sh -c 'odt2txt "{}" | grep -isE "197.7|a. dupont est au 1er|limoges|rue de budapest" && echo "{}"' \;
197.70 €
197.70 €
./media/(...)/****_2017-05-29.ods
197.70 €
197.70 €
./Data500/(...)/****_2017-05-29.ods
A. Dupont est au 1er
./etc/test.odt
A. Dupont est au 1er
./home/moko/Bureau/test.odt
moko@mon-pc:/$ 

/!\ Si on omet   cd / && sudo   ou   sudo find /    au début,
la recherche sera circonscrite au répertoire courant.
  C'est précieux pour abréger le temps de recherche, si on est certain de sa cible,
  mais sinon c'est fâcheux puisque privant d'une partie des réponses potentielles.


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#16 Le 22/01/2018, à 08:30

Compte anonymisé

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

/!\ Si on omet   cd / && sudo   ou   sudo find /    au début,
la recherche sera circonscrite au répertoire courant.
  C'est précieux pour abréger le temps de recherche, si on est certain de sa cible,
  mais sinon c'est fâcheux puisque privant d'une partie des réponses potentielles.

n'imp

il faut pas utiliser sudo à la légère, et pour une recherche de fichier c'est absurde.

Changer de répertoire courant avant find ? mais Why ?

man grep a écrit :

       -s     Ne pas afficher les messages  d'erreurs  concernant
              les fichiers inexistants ou illisibles.

On obtient en plus la correspondance avec les contenus recherchés, en remplaçant l'option -q de grep par l'option -s

je vois pas le rapport entre la correspondance et l'option -s

#17 Le 22/01/2018, à 09:30

moko138

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Anonyme68 a écrit :

/!\ Si on omet   cd / && sudo   ou   sudo find /    au début,
la recherche sera circonscrite au répertoire courant.
  C'est précieux pour abréger le temps de recherche, si on est certain de sa cible,
  mais sinon c'est fâcheux puisque privant d'une partie des réponses potentielles.

n'imp

il faut pas utiliser sudo à la légère, et pour une recherche de fichier c'est absurde.

Bois un café et vas prendre l'air.
Tu as parlé sans réfléchir ni tester.

Si on lance sans sudo

find / \( -iname '*.odt' -o -iname '*.ods' \) -exec sh -c 'odt2txt "{}" | grep -isE "197.7|a. dupont est au 1er|limoges|rue de budapest" && echo "{}"' \;

(ou la même mais avec l'option -q au lieu de -s) on obtient des réponses mais noyées dans des milliers de lignes finissant par :

Permission non accordée

Voilà pour "sudo".


===============

Anonyme68 a écrit :

Changer de répertoire courant avant find ? mais Why ?

Lis et teste avant de répondre :
j'ai répondu à la fin du message précédent.


Ou bien teste ta suggestion faite en #10 qui ne spécifie pas de répertoire :

find \( -iname '*.odt' -o -iname '*.pdf' -o -iname '*.doc' -o -iname '*.docx' -o -iname '*.rtf' \) -exec sh -c  'unoconv -f txt --stdout "{}" | grep -iq "a. dupont est au 1er|limoges" && echo "{}"' \; 2> /dev/null

Si ce que tu cherches n'est pas dans le répertoire courant, la commande ne trouvera rien.


Ou encore imagine quelqu'un qui ne s'intéresse qu'à son DDE de sauvegarde.

===============

Anonyme68 a écrit :
man grep a écrit :

       -s     Ne pas afficher les messages  d'erreurs  concernant
              les fichiers inexistants ou illisibles.

moko138 a écrit :

On obtient en plus la correspondance avec les contenus recherchés, en remplaçant l'option -q de grep par l'option -s

je vois pas le rapport entre la correspondance et l'option -s

Là encore, la réponse est dans mon dernier message :
Là encore, lis et teste avant de répondre.

= =

C'est tout de même étrange, cette obstination chez toi à inventer des erreurs chez les autres, pour pouvoir les critiquer ensuite.
Tu as plusieurs cibles, et ça fait des mois que ça dure.

Tu ne t'es jamais interrogé là-dessus dans ton for intérieur ?

Ton savoir serait tellement plus utile au forum si tu ne déformais pas les faits !


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#18 Le 22/01/2018, à 15:27

cristobal78

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

je réponds aux demandes de moko138 aux post #14 et #15

D'abord je n'avais pas bien compris ce que restitue la commande de moko d'où ma question.

En fait elle restitue les fichiers qui contiennent une sous chaine contenant le "modèle" et non les fichiers qui contiennent strictement le "modèle".

Donc pour reprendre le modèle de moko :
si on cherche des fichiers contenant la chaine "A. Dupont est au 1er "
la commande restituera aussi les fichiers contenant la chaine "A. Dupont est au 1er étage"

Par ailleurs j'ai été perturbé par la formulation du "OU"  ( | )
La commande de moko avec le OU  ( | ) restitue quant à elle
"les fichiers contenant le modèle1"
OU bien (au sens inclusif)
"les fichiers contenant le modèle2"

Telle que c'est formulé on risque de comprendre ... un fichier qui contient
"le modèle1" OU bien (inclusif) "le modèle2"

Maintenant que j'ai tout compris je redis merci à moko pour sa commande  smile smile smile      (quand même plus marrant que d'utiliser "recoll"  tongue )


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#19 Le 22/01/2018, à 20:21

moko138

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

cristobal78,
Tu veux dire que ce serait plus clair si, en #15, dans

contenant  « 197,70 » ou « A. Dupont est au 1er » ou (...)

je remplaçais les "ou" par des "et/ou" ?
  - -

Je ne sais pas ce que tu appelles "sous chaîne".
Si le titre et le premier message ne sont pas assez clairs, merci de pointer les ambiguïtés.
  - -


Le "et/ou" de grep s'obtient avec l'option -E et le tuyau :

grep -E "a|b|c|d"

  - -

Cumulée avec -v (="sauf"), l'option -E devient "NI" ("ni a ni b ni c ni d") :

grep -Ev "a|b|c|d"

C'est donc très utile pour étudier un fichier touffu en écartant les lignes hors-sujet.  smile  (Ex. : ./viewtopic.php?pid=21744995#p21744995).


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#20 Le 23/01/2018, à 16:46

cristobal78

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

@ moko

le terme sous-chaine n'était sans doute pas très heureux !
Je voulais dire que la commande

 sudo find . -iname "*.odt" -exec sh -c  'odt2txt "{}" | grep -iqE "[b]rome[/b]"  && echo "{}"' \;

donnera :
- d'une part tous les fichiers qui parlent de la ville de Rome et de ses empereurs
et
- d'autre part les fichiers où l'on parle de promenade en amoureux sur les berges de la Seine.

Dans mon esprit au départ je pensais que la commande servait à la recherche de fichiers contenant des mots (du dictionnaire) alors que cette commande ne s'intéresse qu'à une suite donnée de caractère (ce que j'ai maladroitement appelé une sous-chaine.

Pour ce qui est du OU ( | ) je ne suis pas sur de moi.
Mon idée était qu'il faut se méfier du fait que f(A U B) ne vaut pas forcément f(A) U f(B)   (où le symbole "U" signifie "union")

Dernière modification par cristobal78 (Le 24/01/2018, à 01:07)


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#21 Le 23/01/2018, à 20:25

Compte anonymisé

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

au cas où la sécurité intéresse quelqu'un, il ne faut pas associer sudo à find (Solution en #10 si jamais wink, il suffit d'ajouter un slash après find si on veut chercher sur tout le système)

@cristobal78

bon courage

Dernière modification par Compte anonymisé (Le 23/01/2018, à 20:29)

#22 Le 24/01/2018, à 01:46

cristobal78

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

@ anonymous

pourquoi "bon  courage" ? Merci en tout cas !  smile

Suite à ta remarque sur find et sudo qu'il ne faudrait pas associer (selon ton post précédent) je suis allé sur le man de find.
Je n'y ai trouvé aucune mise en garde sur ce point.
J'ai balayé la doc ubuntu à la recherche de find et/ou de sudo et je n'y ai pas non plus trouvé de mise en garde sur l'utilisation de sudo find.

@ moko

- Ta commande marche bien mais elle ne marche pas sur les fichiers LibreOffice protégés par un mot de passe.
Je suppose que c'est normal (?)

- Autre remarque sur cette commande :
lors de recherches sur des fichiers .odt la commande une fois exécutée rend la main en affichant le prompt. Donc on voit clairement que la recherche est terminée.

Ceci ne semble pas se passer avec les recherches sur fichiers .ods
Las d'attendre je finis par faire un Ctrl-C pour récupérer le prompt. Mais peut être sur les fichiers ..ods faut-il attendre plus longtemps ??

N'y aurait-il pas un moyen de modifier ta commande avec un message du genre : "Recherche terminée"


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne

#23 Le 02/02/2018, à 11:52

moko138

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Je découvre vos modification et réponses ce matin :

Anonyme68 a écrit :

au cas où la sécurité intéresse quelqu'un, il ne faut pas associer sudo à find (Solution en #10 si jamais wink, il suffit d'ajouter un slash après find si on veut chercher sur tout le système)

@cristobal78

bon courage

find peut en effet trouver les fichiers appartenant à root sans employer sudo :
merci.


À part ça, et je l'avais déjà signalé en #11 et en #17, 
ta commande en #10
- ne fonctionne pas

- et, en envoyant soffice.bin à 100% de charge cpu pendant plusieurs minutes, élève la température du cpu d'une bonne 15aine de degrés C...
Alors pourquoi recommandes-tu, sans le tester, un truc qui ne marche pas ?


Pour le slash : là aussi, déjà répondu.


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#24 Le 02/02/2018, à 11:55

moko138

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

cristobal78 :
Les mots de passe :
Heureusement, que les mots de passe ont un effet ! Que voudrais-tu ?
  - -

Lenteur :
La parenthèse proposée en #10

( -iname '*.odt' -o -iname '*.pdf' -o -iname '*.doc' -o -iname '*.docx' -o -iname '*.rtf' \) 

produit - quand elle ne plante pas soffice.bin - un ralentissement difficilement supportable. Même en se limitant aux deux extensions odt et ods (chez moi : 2,5 minutes contre 10 secondes).

Donc
Il vaut mieux enchaîner deux recherches d'un seul type chacune :

cd / ; find . -iname "*.ods" -exec sh -c 'odt2txt "{}" | grep -Eis "197.7|a. dupont est au 1er|budapest|limoges" && echo "{}"' \; 2> /dev/null ; echo -e "     = = = = =\n     Et voici les résultats en .ODT :\n"; cd / ; find . -iname "*.odt" -exec sh -c 'odt2txt "{}" | grep -Eis "197.7|a. dupont est au 1er|budapest|limoges" && echo "{}"' \; 2> /dev/null ; cd && echo -e "     = = = = =\nRecherche terminée, retour au home."

Chez moi,

moi@mon-pc:~$ cd / ; find . -iname "*.ods" -exec sh -c 'odt2txt "{}" | grep -Eis "197.7|a. dupont est au 1er|budapest|limoges" && echo "{}"' \; 2> /dev/null ; echo -e "     = = = = =\n     Et voici les résultats en .ODT :\n"; cd / ; find . -iname "*.odt" -exec sh -c 'odt2txt "{}" | grep -Eis "197.7|a. dupont est au 1er|budapest|limoges" && echo "{}"' \; 2> /dev/null ; cd && echo -e "     = = = = =\nRecherche terminée, retour au home."
Vista Budapest
197.70 €
197.70 €
./usr/test_2017-05-29.odS
Vista Budapest
197.70 €
197.70 €
./media/Data160/.../test_2017-05-29.ods
Vista Budapest
197.70 €
197.70 €
./Data220/.../test_2017-05-29.ods
Vista Budapest
197.70 €
197.70 €
./etc/test_2017-05-29.ods
     = = = = =
     Et voici les résultats en .ODT :

A. Dupont est au 1er
./etc/test.odt
A. Dupont est au 1er
./home/moi/Bureau/test.odt
     = = = = =
Recherche terminée, retour au home.
moi@mon-pc:~$

un résultat complet (*), exact et détaillé en 10 secondes.  smile



rome/Rome :
Pour tenir compte de la casse, il suffit de remplacer les -iname par autant de -name, mais
attention : en ce cas,  .ods n'est pas .ODS ni odS !


Si tu rencontres un pépin, donne ici la commande et son retour complet. (Bien entendu, tu modifieras les noms ou chemins qui ne regardent pas le forum.)


___
(*) complet à l'exception du répertoire /root.


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#25 Le 02/02/2018, à 19:44

cristobal78

Re : Localiser fichiers libreoffice en cherchant dans leur CONTENU [Tuto]

Hello moko138

Heureux de te voir de retour  smile

Voici ce que donne ta commande dans sa dernière version.
J'ai mis Budapest à la fois pour la recherche sur les fichiers .odt et sur les .ods car ce mot -je le sais- figure sur mon home dans ces 2 types de fichiers :

 cd / ; find . -iname "*.ods" -exec sh -c 'odt2txt "{}" | grep -Eis "budapest" && echo "{}"' \; 2> /dev/null ; echo -e "     = = = = =\n     Et voici les résultats en .ODT :\n"; cd / ; find . -iname "*.odt" -exec sh -c 'odt2txt "{}" | grep -Eis "budapest" && echo "{}"' \; 2> /dev/null ; cd && echo -e "     = = = = =\nRecherche terminée, retour au home."

BUDAPEST
BUDAPEST
./home/MOI/hotel.ods

Mais il y a un "hic" car le message :
    = = = = =
     Et voici les résultats en .ODT

n'apparait pas comme si la 1-ère partie de la cde ne s'achevait pas et bien sur

le message de fin
      = = = = =
Recherche terminée, retour au home.

n'arrive pas non plus. Même après 20 mn d'attente.

Je dois faire un Ctrl-c pour stopper l'opération.

Ceci à décidément l'air d’être lié aux recherches sur fichiers .ods car si je "nettoie"  ta commande de la partie .ods pour ne laisser que la partie .odt ça marche.

Autre remarque
J'ai voulu paramétrer ta commande (dans sa forme d'origine c'est à dire la plus courte) comme ci dessous :

 sudo find . -iname "*.odt" -exec sh -c  'odt2txt "{}" | grep -iqE "[b]rome[/b]"  && echo "{}"' \;

Pour ce faire j'ai créé une variable VILLE="rome"
puis j'ai modifié la ligne de cde :

sudo find . -iname "*.odt" -exec sh -c  'odt2txt "{}" | grep -iqE "[b]$VILLE[/b]"  && echo "{}"' \;

mais  ça n'a pas marché. sad

C'est un fort codeur qui m'a indiqué mon erreur. Il ne faut pas écrire :

 sudo find . -iname "*.odt" -exec sh -c  'odt2txt "{}" | grep -iqE "[b]$VILLE[/b]"  && echo "{}"' \;    # guillemets simples après sh -c

mais

 sudo find . -iname "*.odt" -exec sh -c  "odt2txt "{}" | grep -iqE "[b]$VILLE[/b]"  && echo "{}" " \;   # guillemets doubles après sh -c

et là ça marche. smile

a+


Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE

Hors ligne