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 03/06/2012, à 22:56

cledesol

[Résolu] grep et nom de fichier avec espace

Après bien des recherches et essais infructueux, je me décide à demander votre aide.

J'ai écrit le simple code suivant :

#!/bin/bash

code=51094100257

for f in `find . -type f`
do
        if grep -q $code "${f}"
        then
                echo "$f : Found $code"
        fi
done

Mon but est d'afficher le nom des fichiers contenant le "code".
Cela marche bien sauf pour les fichiers dont le nom comporte un espace: la ligne "if grep -q ....." me retourne un message
comme quoi le fichier n'existe pas, car le nom du fichier est décomposé en autant de morceaux qu'il y a d'espace.

J'ai essayé d'écrire "$f" et autre syntaxes plus ou moins tordues: rien à faire; je ne parvient pas à lui faire prendre le nom du fichier comme une entité.

Avez-vous une idée sur la façon de résoudre ce problème ?

Merci d'avance pour vos conseils

Dernière modification par cledesol (Le 04/06/2012, à 20:59)


Bon, eh bien je vais partir en Théorie parce qu'en Théorie, tout se passe bien ....

Hors ligne

#2 Le 03/06/2012, à 23:41

Postmortem

Re : [Résolu] grep et nom de fichier avec espace

Salut,
Essaie comme ceci :

#!/bin/bash

code=51094100257

while read -rd ''
do
        if grep -q "$code" "$REPLY"
        then
                echo "$REPLY : Found $code"
        fi
done < <(find . -type f -print0)

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 04/06/2012, à 13:59

dev/random

Re : [Résolu] grep et nom de fichier avec espace

cledesol a écrit :

Mon but est d'afficher le nom des fichiers contenant le "code".

pas besoin de shell, grep sait faire:

grep -l -R "code" *

667, the neighbour of the beast..

Hors ligne

#4 Le 04/06/2012, à 18:43

Postmortem

Re : [Résolu] grep et nom de fichier avec espace

dev/random a écrit :
cledesol a écrit :

Mon but est d'afficher le nom des fichiers contenant le "code".

pas besoin de shell, grep sait faire:

grep -l -R "code" *

Ah oui, je zape à chaque fois le -R de grep !
Petite précision néanmoins, pour que ça prenne en compte les fichiers/répertoires cachés, faut remplacer * par . :

grep -l -R "code" .

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#5 Le 04/06/2012, à 20:59

cledesol

Re : [Résolu] grep et nom de fichier avec espace

OK. Je ne connaissait pas l'option -R de grep !!!

Merci beaucoup pour ce coup de main. Je passe le sujet en résolu


Bon, eh bien je vais partir en Théorie parce qu'en Théorie, tout se passe bien ....

Hors ligne

#6 Le 10/06/2012, à 07:10

nesthib

Re : [Résolu] grep et nom de fichier avec espace

pour allier les possibilités de recherche de find et grep on peut aussi utiliser l'argument -exec de find :
par exemple le code suivant affichera les import des fichiers exécutables python de /my/dir (toutes les conditions sont importantes)

find /my/dir -executable -type f -iname *.py -exec echo -e "\n{}" \; -exec grep import {} \;

et créera la sortie suivante :

/my/dir/fichier1.py
import os
import sys

/my/dir/subdir/fichier2.py
from abc import xyz
…

cela peut réduire significativement le temps de recherche si le dossier à parcourir est grand et que le motif ne doit être recherché que dans un type particulier de fichiers


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne