#1 Le 07/07/2022, à 21: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, à 19: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, à 21: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, à 21:31)
Hors ligne
#3 Le 07/07/2022, à 21: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, à 21:36
- nany
Re : [RÉSOLU] Trouver une chaîne de caractères
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, à 22: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.
Déconnecté jusqu’à nouvel ordre
Hors ligne
#6 Le 08/07/2022, à 06: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, à 08: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, à 09:31
- jplemoine
Re : [RÉSOLU] Trouver une chaîne de caractères
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.
Déconnecté jusqu’à nouvel ordre
Hors ligne
#9 Le 08/07/2022, à 10: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, à 11: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.
Déconnecté jusqu’à nouvel ordre
Hors ligne
#11 Le 08/07/2022, à 13: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, à 19: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, à 08:08
- gigiair
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
?
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, à 08: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, à 08: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 : ThinkPad P50 I7-6820HQ, 16G0 Ram W10-PRO( 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, à 08:58
- Nuliel
Re : [RÉSOLU] Trouver une chaîne de caractères
@ar barzh paour : tu as écrit deux fois la même commande
-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, à 09:07)
Hors ligne
#16 Le 10/07/2022, à 09:05
- nany
Re : [RÉSOLU] Trouver une chaîne de caractères
@ar barzh paour : tu as écrit deux fois la même commande
chaîne ≠ chaine
En ligne
#17 Le 10/07/2022, à 09:07
- Nuliel
Re : [RÉSOLU] Trouver une chaîne de caractères
Effectivement, merci nany
Hors ligne
#18 Le 10/07/2022, à 09: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, à 09: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 : ThinkPad P50 I7-6820HQ, 16G0 Ram W10-PRO( 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, à 09: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, à 09: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
Dernière modification par iznobe (Le 10/07/2022, à 09:18)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#21 Le 10/07/2022, à 09: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, à 09: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 : ThinkPad P50 I7-6820HQ, 16G0 Ram W10-PRO( 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, à 09: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).
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.
Dernière modification par diesel (Le 10/07/2022, à 09: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, à 09: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 : ThinkPad P50 I7-6820HQ, 16G0 Ram W10-PRO( 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