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 07/07/2022, à 22:11

diesel

[RÉSOLU] Trouver une chaîne de caractères

Bonsoir,

Je cherche à trouver un fichier (inconnu) quelque part dans mon arborescence contenant une chaîne de caractères connue, elle.

Vous auriez une commande pour ça ? A vue de nez, je pencherais bien pour un find un peu élaboré.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 09/07/2022, à 20:12)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#2 Le 07/07/2022, à 22:31

Nuliel

Re : [RÉSOLU] Trouver une chaîne de caractères

Bonjour,
Par hasard, un grep -lR "chaine_de_caractères" dossier_de_recherche ?

Dernière modification par Nuliel (Le 07/07/2022, à 22:31)

Hors ligne

#3 Le 07/07/2022, à 22:34

nany

Re : [RÉSOLU] Trouver une chaîne de caractères

Bonjour,




Rien d’élaboré :

find / -name "*chaîne de caractères connue*"

Ce à quoi on peut ajouter une redirection pour les erreurs :

find / -name "*chaîne de caractères connue*" 2>/dev/null

Et, si vraiment tu cherches un élément de type fichier :

find / -type f -name "*chaîne de caractères connue*" 2>/dev/null

En ligne

#4 Le 07/07/2022, à 22:36

nany

Re : [RÉSOLU] Trouver une chaîne de caractères

Nuliel a écrit :

Par hasard, un grep -lR "chaine_de_caractères" dossier_de_recherche ?

Ah oui, j’avais mal lu la demande (fichier contenant une chaîne de caractères).

En ligne

#5 Le 07/07/2022, à 23:19

jplemoine

Re : [RÉSOLU] Trouver une chaîne de caractères

grep -HrEi "chaine" <chemin>

H : donne le nom du fichier
r : cherche dans les sous-répertoire
E : expression régulière
i : case insensitive (détecte majuscule et minuscules)
Exemple :

grep -HrEi "session opened" /var/log

pour éviter les erreurs de type "Permission non accordée" ajouter 2>/dev/null à la fin

grep -HrEi "session opened" /var/log 2>/dev/null

Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#6 Le 08/07/2022, à 07:42

diesel

Re : [RÉSOLU] Trouver une chaîne de caractères

Bonjour,

Merci à vous. Je m’y mets.

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#7 Le 08/07/2022, à 09:53

gigiair

Re : [RÉSOLU] Trouver une chaîne de caractères

J'exécuterais la commande

find /  -type f  -exec grep -iH "chaîne recherchée" \{\} \;  2>/dev/null

Pour une recherche dans toute l'arborescence.
Cela peut prendre « un certain temps », il peut être judicieux de limiter la recherche à une partie de l'arborescence ou d'interdire de parcourir certaines branches par un ou plusieurs -prune.
Voir

  info '(find)Finding Files'

--
JJR.

Hors ligne

#8 Le 08/07/2022, à 10:31

jplemoine

Re : [RÉSOLU] Trouver une chaîne de caractères

gigiair a écrit :

Cela peut prendre « un certain temps »,

Oui sur un NAS de quelques centaines de To voire quelques Po.
Non sur un disque interne de l'ordre du To sur un sous-répertoire "ciblé' et pas en racine : Si tu respectes la FHS, il y a des chances pour que tu saches "à peu près" où est le fichier.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#9 Le 08/07/2022, à 11:16

gigiair

Re : [RÉSOLU] Trouver une chaîne de caractères

Je pense que la plupart du temps, on a une petite idée de la sous-arborescence dans laquelle on va chercher le fichier, il faut donc préciser la racine de l'arborescence de recherche :

find /racine/dela/sous/arborescence  -type f  -exec grep -iH "chaîne recherchée" \{\} \;  2>/dev/null

--
JJR.

Hors ligne

#10 Le 08/07/2022, à 12:45

jplemoine

Re : [RÉSOLU] Trouver une chaîne de caractères

@gigiair : Quel est l’intérêt de cette commande par rapport à un simple

grep -irH "chaîne recherchée" /racine/dela/sous/arborescence

?


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#11 Le 08/07/2022, à 14:16

Watael

Re : [RÉSOLU] Trouver une chaîne de caractères

-H, c'est le comportement par défaut.
et, vu que diesel cherche le nom du fichier qui contient le motif, ce n'est pas l'option adaptée; il vaut mieux utiliser -l, comme cela a été proposé, dès la première réponse, par Nuliel.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 09/07/2022, à 20:12

diesel

Re : [RÉSOLU] Trouver une chaîne de caractères

Merci à tous.

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#13 Le 10/07/2022, à 09:08

gigiair

Re : [RÉSOLU] Trouver une chaîne de caractères

jplemoine a écrit :

@gigiair : Quel est l’intérêt de cette commande par rapport à un simple

grep -irH "chaîne recherchée" /racine/dela/sous/arborescence

?

find permet de raffiner le parcours de l'arborescence, par exemple avec -prune.
J'ai l'habitude de procéder ainsi, c'est un réflexe...


--
JJR.

Hors ligne

#14 Le 10/07/2022, à 09:41

ar barzh paour

Re : [RÉSOLU] Trouver une chaîne de caractères

une précision
attention , peut-être une évidence pour certains mais

grep -lR "chaîne"

ne donne pas forcément le même résultat que

grep -lR "chaine"

Dernière modification par ar barzh paour (Le 10/07/2022, à 09:52)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#15 Le 10/07/2022, à 09:58

Nuliel

Re : [RÉSOLU] Trouver une chaîne de caractères

@ar barzh paour : tu as écrit deux fois la même commande

man grep a écrit :

       -l, --files-with-matches
              Suppress normal output; instead print the  name  of  each  input
              file  from  which  output would normally have been printed.  The
              scanning will stop on the first match.

-l ressort donc le nom du premier fichier contenant la chaîne de caractères (ou la regex).

Et pour compléter, -i c'est pour être insensible à la casse, et -H n'est pas utile puisque par défaut lorsqu'il y a plusieurs fichiers (ce qui est le cas avec le -R ou -r)

Et les find -exec grep est moins efficace que grep directement: find appelle grep sur chaque fichier (un process par fichier), contrairement à grep -R/-r qui fait qu'un seul processus.

Dernière modification par Nuliel (Le 10/07/2022, à 10:07)

Hors ligne

#16 Le 10/07/2022, à 10:05

nany

Re : [RÉSOLU] Trouver une chaîne de caractères

Nuliel a écrit :

@ar barzh paour : tu as écrit deux fois la même commande

chaîne ≠ chaine tongue

En ligne

#17 Le 10/07/2022, à 10:07

Nuliel

Re : [RÉSOLU] Trouver une chaîne de caractères

Effectivement, merci nany smile

Hors ligne

#18 Le 10/07/2022, à 10:08

ar barzh paour

Re : [RÉSOLU] Trouver une chaîne de caractères

@ Nuliel , non , c'est pas évident mais comme l'a dit nany chaine n'est pas chaîne et l'option -i n'y fera rien
.... les posts se croisent !!!!!

Dernière modification par ar barzh paour (Le 10/07/2022, à 10:09)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#19 Le 10/07/2022, à 10:13

Nuliel

Re : [RÉSOLU] Trouver une chaîne de caractères

Oui, pour ces cas là il y a les regex:

nuliel@nuliel-Latitude-E7270:~$ echo -e "chaîne\nchaine" | grep 'cha[[=i=]]ne'
chaîne
chaine

Les deux sont sélectionnés, par contre je ne sais pas comment on fait pour appliquer ça à tous les caractères.

Hors ligne

#20 Le 10/07/2022, à 10:16

iznobe

Re : [RÉSOLU] Trouver une chaîne de caractères

Bonjour , c ' est pas possible de faire un truc dans le genre :

grep -lR "cha*ne"

? avec un caractere joker .
ou 3 " bouts " de chaine concatenée avec celle du milieu en joker .

PS : j ' y comprends reien au regex tongue

Dernière modification par iznobe (Le 10/07/2022, à 10:18)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#21 Le 10/07/2022, à 10:20

ar barzh paour

Re : [RÉSOLU] Trouver une chaîne de caractères

en fait dans un de mes shells de recherche de vocabulaire , j'utilise la transformation du mot recherché par

#!/bin/bash
# étendre le mot le mot reçu
# enlever tous les accents x puis remplacer x par [..]
var="$1"
var=$( echo "$var"  | sed 's/[àâ]/a/g'     | sed 's/a/[aàâɑ]/g'    )
var=$( echo "$var"  | sed 's/[éêèë]/e/g'   | sed 's/e/[eéêèëεə]/g' )
var=$( echo "$var"  | sed 's/[îïi᷉]/i/g'    | sed 's/i/[iîïi᷉]/g'    )
var=$( echo "$var"  | sed 's/[ô]/o/g'      | sed 's/o/[oôɔ]/g'     )
var=$( echo "$var"  | sed 's/[ùûü]/u/g'    | sed 's/u/[uùûü]/g'    )
var=$( echo "$var"  | sed 's/ÿ/y/g'        | sed 's/y/[yÿ]/g'      )
var=$( echo "$var"  | sed 's/ñ/n/g'        | sed 's/n/[nñ]/g'      )
var=$( echo "$var"  | sed 's/zh/z/g'       | sed 's/z/z[h]*/g'     )  # ajout 2022-04-04 cherche z ou zh , zh ou z
var=$( echo "$var"  | sed 's/[sz]/s/g'     | sed 's/s/[sz]/g'      )  # modifié 4-4 cherche s ou z
echo "$var"

.. on peut faire mieux, mais je m'en contente

@ Nuliel , à l'époque où j'ai construit ce shell je ne connaissais pas  [[=i=]] , ça m'aurait peut-être simplifié la tâche !!!!

mais je ne sais pas si par exemple
[[-i=]] remplace bien iîïi᷉ !!!
ou
si [[=e=]]  remplace eéêèëεə

Dernière modification par ar barzh paour (Le 10/07/2022, à 10:29)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#22 Le 10/07/2022, à 10:27

diesel

Re : [RÉSOLU] Trouver une chaîne de caractères

Bonjour,

Inutile de vous étriper sur les subtilités des chaînes de caractères contenant des caractères particuliers. Ma recherche ne comprenait que des caractères alphanumériques non accentués et des points (adresse ipv4 et nom de site). wink smile

Amicalement.

Jean-Marie

P.S. Pour chaîne ≠ chaine, j'avais remarqué mais pour y arriver, j'ai quand-même dû changer de lunettes et m'approcher de l'écran. wink big_smile big_smile big_smile

Dernière modification par diesel (Le 10/07/2022, à 10:32)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#23 Le 10/07/2022, à 10:31

ar barzh paour

Re : [RÉSOLU] Trouver une chaîne de caractères

@ Diesel
OK j'ai vu que la discussion est mise en résolue !!


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 22.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne