#1 Le 28/09/2011, à 09:33
- terje
commande find : contenu de fichier
Bonjour
la commande find est très complexe pour un néophyte comme moi.
Comment utiliser find pour qu'elle me sorte le nom du fichier .odt qui contient les mots "feuilles tombent"
Je sais rechercher le nom d'un fichier find /chemin -name "*nom_du_fichier*"
Maintenant, je recherche le contenu dans un fichier dont je ne connais plus le nom.
Merci à vous
Terje
Dernière modification par terje (Le 28/09/2011, à 20:44)
Thinkpad X220 14.04 Xubuntu
Hors ligne
#2 Le 28/09/2011, à 09:43
- inbox
Re : commande find : contenu de fichier
Un problème résolu ? Indiquez le en modifiant le titre du sujet.
Hors ligne
#3 Le 28/09/2011, à 09:59
- Epehj
Re : commande find : contenu de fichier
Salut,
Sinon tu peux aussi utiliser grep :
grep -irl "cequetucherches" *
-i pour insensible à la casse
-r pour récursif
-l pour que la commande te donne le nom du fichier
et * pour rechercher dans tous les fichiers à partir du répertoire courant.
Linux user #447629 - Ubuntu user # 21770
C'est en sciant que Léonard devint scie
Hors ligne
#4 Le 28/09/2011, à 11:38
- terje
Re : commande find : contenu de fichier
bonjour
merci à vous
J'ai l'impression que ces commandes ne renvoient pas le nom du fichier qui contient les mots feuilles et tombent.
Find n'agit-il que sur les noms de fichiers ou est-ce possible de s'en servir pour chercher dans le contenu du fichier ?
Attention : ce que j'appelle contenir : c'est DANS le texte (du fichier .odt) et non dans le nom du fichier
Merci à vous en tout cas.
Terje
Thinkpad X220 14.04 Xubuntu
Hors ligne
#5 Le 28/09/2011, à 12:01
- Bousky
Re : commande find : contenu de fichier
Comme indiqué par Epehj, utilise grep.
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#6 Le 28/09/2011, à 12:07
- Postmortem
Re : commande find : contenu de fichier
Salut,
Tu peux essayer ceci :
grep -irH 'chainerecherchée' repertoire-ou-serait-le-fichier
Ou
find repertoire -type f -exec grep -iH 'chainerecherchée' {} \;
L'option -H affiche le nom du fichier suivi de la ou des lignes où se trouvent la chaîne recherchée.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#7 Le 28/09/2011, à 16:58
- terje
Re : commande find : contenu de fichier
Bonjour à vous
je n'y arrive pas. Les commandes ne me renvoient rien.
Pour tester, j'ai créé un répertoire test et je tente vos commandes.
Dans le répertoire, j'ai mis la fable la_cigale_et_la_fourmi.odt
Je demande de me retourner donc ce fichier, en entrant comme paramètres un mot de la fable, par exemple 'trouva'
Je me mets dans le répertoire courant
nicolas@nicolas-laptop:/media/professionnel/2011_2012/test_find_grep$ grep -irl 'trouva' *
nicolas@nicolas-laptop:/media/professionnel/2011_2012/test_find_grep$
nicolas@nicolas-laptop:/media/professionnel/2011_2012/test_find_grep$ find -type f -exec grep -iH 'trouva' {} \;
nicolas@nicolas-laptop:/media/professionnel/2011_2012/test_find_grep$
...
qu'elle que soit la formule, je n'ai pas la_cigale_et_la_fourmi.odt qui m'est renvoyée...
Terje
Thinkpad X220 14.04 Xubuntu
Hors ligne
#8 Le 28/09/2011, à 17:04
- Bousky
Re : commande find : contenu de fichier
En fait c'est normal, les fichiers odt ne sont pas des fichiers texte mais des archives, c'est-à-dire que le texte n'est pas directement lisible dans le fichier…
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#9 Le 28/09/2011, à 17:15
- terje
Re : commande find : contenu de fichier
ah... ok.
bon moi, je suis instit et je fabrique des fichiers .odt pour les cours des gamins. J'en ai une flopée de .odt et des fois je ne sais plus où est quoi...
Terje
Thinkpad X220 14.04 Xubuntu
Hors ligne
#10 Le 28/09/2011, à 17:19
- terje
Re : commande find : contenu de fichier
Trouvé !!
nicolas@nicolas-laptop:/media/professionnel/2011_2012/test_find_grep$ find -name '*.odt' -exec sh -c 'unzip -c "{}" content.xml | grep -qi "trouva"' ";" -print
./la_cigale_et_la_fourmi.odt
nicolas@nicolas-laptop:/media/professionnel/2011_2012/test_find_grep$
Par contre, je suis incapable d'expliquer cette ligne !!
Merci en tout cas pour les infos sur les .odt
Terje
Thinkpad X220 14.04 Xubuntu
Hors ligne
#11 Le 28/09/2011, à 17:21
- terje
Re : commande find : contenu de fichier
Maintenant, je voudrais mettre cette commande en alias dans le .bashrc genre alias trouve= la commande mais comment je gère la variable de la chaine de caractère à trouver ?
Merci
Terje
Thinkpad X220 14.04 Xubuntu
Hors ligne
#12 Le 28/09/2011, à 17:59
- Bousky
Re : commande find : contenu de fichier
En fait les odt sont des archives zip, donc ce que fait ta ligne c'est :
- Chercher les odt ;
- Déziper le fichier « content.xml » ;
- Afficher le nom du fichier initial si le fichier dézipé contient la chaine cherchée.
Pour ce qui est des alias, ça ne marche que si ce que tu veux passer en argument est à la fin. Ici il faut utiliser une fonction :
function findinodt {
find "$1" -name '*.odt' -exec sh -c 'unzip -c "{}" content.xml | grep -qi "$2"' ";" -print
}
Cet exemple s'appelle sous la forme « findinodt <dossier> <expression> ».
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#13 Le 28/09/2011, à 18:12
- piolet
Re : commande find : contenu de fichier
comme dit plus haut un odt n'est pas un fichier texte.
installe recoll il indexe les fichiers et permet une recherche du contenu avec de ET et des OU
voir dans la documentation ubuntu indexation de fichiers.
Dernière modification par piolet (Le 28/09/2011, à 18:17)
lenovo T430 RAM 8Go Xubuntu 22.04 LTS
Hors ligne
#14 Le 28/09/2011, à 18:45
- alej
Re : commande find : contenu de fichier
Sinon, au chapitre des trucs simples, y'a ça...
Hors ligne
#15 Le 28/09/2011, à 19:32
- terje
Re : commande find : contenu de fichier
En fait les odt sont des archives zip, donc ce que fait ta ligne c'est :
- Chercher les odt ;
- Déziper le fichier « content.xml » ;
- Afficher le nom du fichier initial si le fichier dézipé contient la chaine cherchée.Pour ce qui est des alias, ça ne marche que si ce que tu veux passer en argument est à la fin. Ici il faut utiliser une fonction :
function findinodt { find "$1" -name '*.odt' -exec sh -c 'unzip -c "{}" content.xml | grep -qi "$2"' ";" -print }
Cet exemple s'appelle sous la forme « findinodt <dossier> <expression> ».
Je suppose que $1 et $2 sont des variables.
$2: je comprends c'est la chaine de caractère.
$1 c'est quoi ?
Merci
Terje
Thinkpad X220 14.04 Xubuntu
Hors ligne
#16 Le 28/09/2011, à 20:13
- sputnick
Re : commande find : contenu de fichier
C'est les paramètres de la fonction
findinodt <dossier> <expression>
$1 c'est le dossier
$2 c'est la chaine
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#17 Le 28/09/2011, à 20:33
- terje
Re : commande find : contenu de fichier
Ah oui !
j'avais oublié ! C'est le chemin en fait.
ok dacocac !
Je teste.
Merci pour tout.
Terje
Au fait : je colle la fonction dans le .bashrc ?
Thinkpad X220 14.04 Xubuntu
Hors ligne
#18 Le 28/09/2011, à 20:36
- terje
Re : commande find : contenu de fichier
ça marche d'enfer !
Résolu.
Terje
Thinkpad X220 14.04 Xubuntu
Hors ligne
#19 Le 28/09/2011, à 20:39
- terje
Re : commande find : contenu de fichier
tiens juste un truc : la complétion automatique ne fonctionne pas pour les fonctions fabriquées... y a une astuce pour la faire fonctionner ?
Terje
Thinkpad X220 14.04 Xubuntu
Hors ligne
#20 Le 28/09/2011, à 20:44
- terje
Re : commande find : contenu de fichier
Ah bah non...
ça marche pas du tonnerre !
Il m'affiche tous les fichiers .odt en fait, indépendamment de la chaine de caractères demandée...
nicolas@nicolas-laptop:~$ trouve /media/professionnel/2011_2012/test_find_grep/ corbeau
/media/professionnel/2011_2012/test_find_grep/la_cigale_et_la_fourmi.odt
/media/professionnel/2011_2012/test_find_grep/le_corbeau_et_le_renard.odt
nicolas@nicolas-laptop:~$ trouve /media/professionnel/2011_2012/test_find_grep/ "corbeau"
/media/professionnel/2011_2012/test_find_grep/la_cigale_et_la_fourmi.odt
/media/professionnel/2011_2012/test_find_grep/le_corbeau_et_le_renard.odt
nicolas@nicolas-laptop:~$ trouve /media/professionnel/2011_2012/test_find_grep/ 'corbeau'
/media/professionnel/2011_2012/test_find_grep/la_cigale_et_la_fourmi.odt
/media/professionnel/2011_2012/test_find_grep/le_corbeau_et_le_renard.odt
nicolas@nicolas-laptop:~$
Thinkpad X220 14.04 Xubuntu
Hors ligne
#21 Le 28/09/2011, à 20:48
- terje
Re : commande find : contenu de fichier
tiens... par contre quand je lance la commande originale, hors de la fonction, ça marche...
nicolas@nicolas-laptop:/media/professionnel/2011_2012$ find -name '*.odt' -exec sh -c 'unzip -c "{}" content.xml | grep -qi "trouva"' ";" -print
./la_cigale_et_la_fourmi.odt
./test_find_grep/la_cigale_et_la_fourmi.odt
./evaluations_diagnostiques_septembre/maitrise_de_la_langue/comprehension_ txt_court.odt
nicolas@nicolas-laptop:/media/professionnel/2011_2012$
Je vais revoir la fonction donc.
Thinkpad X220 14.04 Xubuntu
Hors ligne
#22 Le 28/09/2011, à 20:50
- Bousky
Re : commande find : contenu de fichier
Pour plus de propreté, on met généralement les alias (et pourquoi pas les fonctions) dans ~/.bash_aliases.
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne