Détecter fichiers qui n'ont pas une expression

classic Classic list List threaded Threaded
12 messages Options
Reply | Threaded
Open this post in threaded view
|

Détecter fichiers qui n'ont pas une expression

andre_debian
Bonjour,

Dans une série de fichiers ayant la même extension,
p. ex. .txt, comment afficher ceux qui n'ont pas une
expression précise :
p. ex. "background-color:#F3F781;"

Merci d'avance,

André

Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

Bernard Isambert
Si j'ai bien compris la question :

for FIC in <fichiers>
do
grep -l -q <expression> "$FIC" || echo "$FIC"
done


--
Bernard.
20 ans d'utilisation de Debian. Comme le temps passe...

Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

Erwan David
Le 06/27/17 à 10:50, Bernard Isambert a écrit :
> Si j'ai bien compris la question :
>
> for FIC in <fichiers>
> do
> grep -l -q <expression> "$FIC" || echo "$FIC"
> done
>
>

grep -L <expression> <fichiers>
plutôt.

Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

Eric Degenetais
Si les fichiers ne sont pas forcément au même niveau d'arborescence :

find répertoire/racine/recherche -type f -name "*.txt" -exec grep expression {} \; -print 

Cordialement 

Éric Dégenètais 


Le 27 juin 2017 10:52, "Erwan David" <[hidden email]> a écrit :
Le 06/27/17 à 10:50, Bernard Isambert a écrit :
> Si j'ai bien compris la question :
>
> for FIC in <fichiers>
> do
> grep -l -q <expression> "$FIC" || echo "$FIC"
> done
>
>

grep -L <expression> <fichiers>
plutôt.


Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

hamster-2
Le 27/06/2017 à 13:48, Eric Degenetais a écrit :
> Si les fichiers ne sont pas forcément au même niveau d'arborescence :
>
> find répertoire/racine/recherche -type f -name "*.txt" -exec grep
> expression {} \; -print

Pour avoir les fichiers qui n'ont PAS une certaine expression, j'aurais
plutot mis grep -v dans ta formule. Et peut etre aussi un \; apres le print

Mais il y a un point que j'ai pas compris : est-ce qu'il faut des
fichiers qui n'ont pas une expression dans leur nom, ou bien dans le
corps du fichier ?

Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

andre_debian
In reply to this post by Bernard Isambert
On Tuesday 27 June 2017 10:50:47 Bernard Isambert wrote:
> Si j'ai bien compris la question :
> for FIC in <fichiers>
> do
> grep -l -q <expression> "$FIC" || echo "$FIC"
> done

On Tuesday 27 June 2017 10:52:39 Erwan David wrote:
> grep -L <expression> <fichiers>   plutôt.

Les deux ci-dessus semblent bien marcher.
Merci.

Mais :
On Tuesday 27 June 2017 13:48:35 Eric Degenetais wrote:
> find répertoire/racine/recherche -type f -name "*.txt" -exec grep
> expression {} \; -print

affichent ceux qui ont l'expression... :-)

André


Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

Eric Degenetais
Effectivement, mille excuses c'est une étourderie, il faut ajouter -v au grep :

find chemin/racine -type f -name "*.txt" -exec grep -v <expression> {} \; -print 

Cordialement 

Éric Dégenètais 


Le 27 juin 2017 7:01 PM, <[hidden email]> a écrit :
On Tuesday 27 June 2017 10:50:47 Bernard Isambert wrote:
> Si j'ai bien compris la question :
> for FIC in <fichiers>
> do
> grep -l -q <expression> "$FIC" || echo "$FIC"
> done

On Tuesday 27 June 2017 10:52:39 Erwan David wrote:
> grep -L <expression> <fichiers>   plutôt.

Les deux ci-dessus semblent bien marcher.
Merci.

Mais :
On Tuesday 27 June 2017 13:48:35 Eric Degenetais wrote:
> find répertoire/racine/recherche -type f -name "*.txt" -exec grep
> expression {} \; -print

affichent ceux qui ont l'expression... :-)

André



Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

andre_debian
On Tuesday 27 June 2017 20:14:49 Eric Degenetais wrote:
> Effectivement, mille excuses c'est une étourderie, il faut ajouter -v au
> grep :
> find chemin/racine -type f -name "*.txt" -exec grep -v <expression> {} \;
> -print

Merci.

Ça fonctionne mais moins bien que les deux ci-dessous,
car la commande affiche quand même quelques fichiers qui
ont pourtant l'expression.

Bonne journée, André

> Le 27 juin 2017 7:01 PM, <[hidden email]> a écrit :
> On Tuesday 27 June 2017 10:50:47 Bernard Isambert wrote:
> > Si j'ai bien compris la question :
> > for FIC in <fichiers>
> > do
> > grep -l -q <expression> "$FIC" || echo "$FIC"
> > done
>
> On Tuesday 27 June 2017 10:52:39 Erwan David wrote:
> > grep -L <expression> <fichiers>   plutôt.
>
> Les deux ci-dessus semblent bien marcher.
> Merci.


Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

Eric Degenetais
Étrange, ça devrait fonctionner aussi. Et aider si les fichiers sont dispersés. Pas le temps de tester en détail mais il faudra que j'y revienne O_o 

Le 28 juin 2017 10:44, <[hidden email]> a écrit :
On Tuesday 27 June 2017 20:14:49 Eric Degenetais wrote:
> Effectivement, mille excuses c'est une étourderie, il faut ajouter -v au
> grep :
> find chemin/racine -type f -name "*.txt" -exec grep -v <expression> {} \;
> -print

Merci.

Ça fonctionne mais moins bien que les deux ci-dessous,
car la commande affiche quand même quelques fichiers qui
ont pourtant l'expression.

Bonne journée, André

> Le 27 juin 2017 7:01 PM, <[hidden email]> a écrit :
> On Tuesday 27 June 2017 10:50:47 Bernard Isambert wrote:
> > Si j'ai bien compris la question :
> > for FIC in <fichiers>
> > do
> > grep -l -q <expression> "$FIC" || echo "$FIC"
> > done
>
> On Tuesday 27 June 2017 10:52:39 Erwan David wrote:
> > grep -L <expression> <fichiers>   plutôt.
>
> Les deux ci-dessus semblent bien marcher.
> Merci.


Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

Étienne Mollier
Le 28 juin 2017 10:44, <[hidden email]> a écrit :
> On Tuesday 27 June 2017 20:14:49 Eric Degenetais wrote:
> > find chemin/racine -type f -name "*.txt" -exec grep -v <expression> {} \; -print
>
>  Merci.
>
>  Ça fonctionne mais moins bien que les deux ci-dessous,
>  car la commande affiche quand même quelques fichiers qui
>  ont pourtant l'expression.

On 06/28/2017 06:55 PM, Eric Degenetais wrote:
> Étrange, ça devrait fonctionner aussi. Et aider si les fichiers
> sont dispersés. Pas le temps de tester en détail mais il faudra
> que j'y revienne O_o
>

Bonjour,

Si j'ai bien compris le principe, la logique semble pêcher dans
la négation de la correspondance.  Avec la proposition ci-dessus,
l'assertion suivante est vraie alors qu'apparemment, on la
préférerait fausse :

        Si le fichier contient au moins une ligne dans laquelle
            l'expression n'est pas présente,
        alors afficher le fichier.

La commande suivante pourrait-elle correspondre à vos attentes ?

        find chemin/racine/ -type f -name '*.txt' -not -exec grep -q <expression> '{}' \;

Le `-v` du `grep` est enlevé et est remplacé par l'option `-not`
de la commande `find` pour indiquer que la commande passée au
`-exec` doit terminer en erreur pour que le fichier corresponde à
la recherche.  L'option `-q` est simplement là pour signaler à
`grep` de ne pas afficher les correspondances qu'il trouve, ça
donnera au passage une sortie d'écran un peu plus lisible.

À plus,
--
Étienne Mollier <[hidden email]>

Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

Étienne Mollier


On 06/28/2017 08:09 PM, Étienne Mollier wrote:
> La commande suivante pourrait-elle correspondre à vos attentes ?
>
>         find chemin/racine/ -type f -name '*.txt' -not -exec grep -q <expression> '{}' \;
>

Erratum, le `-print` à sauté à la fin de la commande.  Il faut lire :

        find chemin/racine/ -type f -name '*.txt' -not -exec grep -q <expression> '{}' \; -print

--
Étienne Mollier <[hidden email]>

Reply | Threaded
Open this post in threaded view
|

Re: Détecter fichiers qui n'ont pas une expression

Eric Degenetais
Effectivement, ça devrait fonctionner de cette manière. Je devais être en vrac... si -q était l'option correcte sur grep seul alors c'est aussi la bonne option dans find -exec 

Le 28 juin 2017 20:20, "Étienne Mollier" <[hidden email]> a écrit :


On 06/28/2017 08:09 PM, Étienne Mollier wrote:
> La commande suivante pourrait-elle correspondre à vos attentes ?
>
>         find chemin/racine/ -type f -name '*.txt' -not -exec grep -q <expression> '{}' \;
>

Erratum, le `-print` à sauté à la fin de la commande.  Il faut lire :

        find chemin/racine/ -type f -name '*.txt' -not -exec grep -q <expression> '{}' \; -print

--
Étienne Mollier <[hidden email]>