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 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

Salut,

Comme indiqué dans le manuel de find, "-print" renvoie le nom du fichier.

A+


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

Bousky a écrit :

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