Comment supprimer des fichiers avec un contenu spécifique

bonjour
je cherche le moyen de supprimer des fichiers * qui contiennent soit une adresse ip ou du texte spécifique de façon recurssive : je suis sous debian 8

j’ai tenté la commande suivante mais je pense qu’il y a un problème de syntaxe ? pouvez vous m’aider ?

grep -nri ‘toto.ch’ /var/spool/mail/ | -exec rm -rf {} ;

cordialement

Debian 8

Salut,

Cette commande devrait fonctionner, mais il y a probablement plus efficace/élégant :

Ton option -exec provient de la commande find…

merci pour ta réponse :

donc la commande :

find /var/spool/mail/ -name ‘toto.ch’ -type f -exec rm -rf {} ;

devrait fonctionner ?

Merci de ton aide

non, [mono]find[/mono] va chercher un nom de fichier et non le contenu d’un fichier comme [mono]rgrep[/mono].

bonjour
la commande ne fonctionne pas ?
rm $(rgrep -rs ‘a@supprimer’ /var/spool/mail/ | awk -F “:” ‘{print $1}’)
sur debian 8 voici le message :
rm : opérande manquant

cordialement

Que renvoie [mono]rgrep -rs ‘a@supprimer’ /var/spool/mail/ | awk -F “:” ‘{print $1}’[/mono] ?
A mon avis, rien, d’où [mono]rm[/mono] qui se plaint.

bonjour
effectivement la commande :
rgrep -rs ‘a@supprimer’ /var/spool/mail/ | awk -F “:” '{print $1}'
n’affiche rien
cordialement

Donc c’est qu’il ne trouve aucune occurence de ‘a@supprimer’ dans les fichiers du répertoire /var/spool/mail/, donc tout va bien.

bonjour
oui je confirme ça fonctionne à merveille
quelqu’un avait fait le ménage sans me prévenir …
Merci de ton aide
cordialement

Petites remarques de chippoteur :

  • rgrep avec l’option -r, c’est redondant
  • il peut être intéressant de supprimer les doublons, si un fichier contient plusieurs fois la chaine à matcher
  • la commande va échouer si il y a beaucoup de fichiers (rm: argument list too long), on peut utiliser xargs qui va splitter en plusieurs commandes si nécessaire