53 votes

Supprimer les fichiers avec la chaîne trouvée dans le fichier - linux cli

J'essaie de supprimer les e-mails erronés en trouvant l'adresse e-mail dans le fichier via Linux CLI.

Je peux obtenir les fichiers avec

find . | xargs grep -l email@domain.com

Mais je ne peux pas comprendre comment les supprimer à partir de là car le code suivant ne fonctionne pas.

rm -f | xargs find . | xargs grep -l email@domain.com

Merci pour votre aide.

73voto

ajreal Points 31456

@Martin Beckett a posté une excellente réponse, veuillez suivre cette directive

solution pour votre commande :

 grep -l email@domain.com * | xargs rm

Ou

 for file in $(grep -l email@domain.com *); do
    rm -i $file;
    #  ^ prompt for delete
done

72voto

Martin Beckett Points 60406

Pour des raisons de sécurité, je redirige normalement la sortie de find vers quelque chose comme awk et crée un fichier batch avec chaque ligne étant "rm filename"

De cette façon, vous pouvez le vérifier avant de l'exécuter et corriger manuellement les cas de bord étranges difficiles à faire avec une regex.

 find . | xargs grep -l email@domain.com | awk '{print "rm "$1}' > doit.sh
vi doit.sh // check for murphy and his law
source doit.sh

17voto

OneOfOne Points 15558

Vous pouvez utiliser find 's -exec et -delete , cela ne supprimera le fichier que si la commande grep réussit. En utilisant grep -q pour qu'il n'imprime rien, vous pouvez remplacer le -q par -l pour voir quels fichiers contenaient la chaîne.

 find . -exec grep -q 'email@domain.com' '{}' \; -delete

3voto

Cawas Points 3303

En dépit de réponse sûre de Martin, si vous avez la certitude de ce que vous voulez supprimer, comme par écrit un script, je l' ai utiliséce avec un plus grand succès que tout autre paquebot suggéré avant ici:

 $ find . | grep -l email@domain.com | xargs -I {} rm -rf {}

Mais je trouve plutôt par nom :

 $ find . -iname *something* | xargs -I {} echo {}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X