Supprimer des fichiers avec de la corde trouvé dans le fichier de ligne de commande linux
Je suis en train de supprimer des e-mails erronés fondée sur la recherche de l'adresse e-mail dans le fichier via la ligne de commande Linux.
Je peux obtenir les fichiers avec
find . | xargs grep -l [email protected]
Mais je ne peux pas comprendre comment les supprimer à partir de là que le code suivant ne fonctionne pas.
rm -f | xargs find . | xargs grep -l [email protected]
Merci pour votre aide.
Vous devez vous connecter pour publier un commentaire.
Pour plus de sécurité j'ai l'habitude de tuyau de la sortie de la trouver à quelque chose comme awk et de créer un fichier de commandes avec chaque ligne étant "rm fichier"
De cette façon, vous pouvez vérifier avant de l'exécuter en fait manuellement et de fixer n'importe quel étrange cas limites qui sont difficiles à faire avec une regex
wc -l
ne semble pas fonctionner.find . -type f
?@Martin Beckett a réalisé une excellente réponse, veuillez suivre cette directive
solution pour votre commande :
Ou
grep -l -R --include="*" [email protected] ./
au lieuVous pouvez utiliser
find
's-exec
et-delete
, il suffira de supprimer le fichier si legrep
commande réussit. À l'aide degrep -q
donc il ne serait pas imprimer quoi que ce soit, vous pouvez remplacer le-q
avec-l
pour voir les fichiers a la chaîne en eux.find . -exec grep -q '[email protected]' '{}' \; -print
montrer quoi que ce soit?find . |grep '[email protected]'
à d'autres part fonctionne très bien. Je suis sur un mac, btw. ma réponse il résolu pour moi en tout cas. 😉Malgré Martin sûre de la réponse, si vous avez la certitude de ce que vous souhaitez supprimer, comme dans l'écriture d'un script, j'ai utilisé cette avec plus de succès que n'importe quel autre one-liner suggéré avant ici:
Mais je plutôt de trouver par nom:
J'ai aimé Martin Beckett solution, mais a constaté que les noms de fichier avec des espaces pouvait de voyage, en haut (comme qui utilise des espaces dans les noms de fichier, pfft :D). Aussi je voulais revoir ce qui a été appariés si je déplace les fichiers correspondants à un dossier local au lieu de simplement les supprimer avec le 'rm' de la commande:
NOTE: j'ai eu des problèmes où grep pourrait ne pas correspondre à l'intérieur des fichiers qui avaient l'encodage utf-16.
Voir ici pour une solution de contournement. Dans le cas où ce site disparaît ce que vous faire est d'utiliser la commande grep est un indicateur qui rend grep traiter les fichiers comme du texte et utiliser une regex modèle qui correspond à n'importe quel premier octet de chaque caractère étendu. Par exemple, pour correspondre à une Entité faire:
et si cela ne fonctionne pas, alors essayez ceci:
fait le travail mieux. L'utilisation de `...` pour exécuter la commande de proposer les noms de fichier contenant des [email protected] (grep -l liste à eux, j'ignore la casse) pour les enlever avec rm (-f force /-je de manière interactive).
comment faire pour supprimer: