Grep avec rm

Résolu
enyrix Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
J'aimerais rechercher une chaine de caractère dans des fichiers, pour les fichiers possédant cette chaine de caractère j'aimerais pouvoir effacer ces fichiers avec confirmation avant en pouvant voir le contenu.

Pour rechercher dans les fichier j'utilise:
grep -r "salut" .

Ce qui donne par exemple:
./test:abc salut
./test2:test salut 2

J'aimerais effacer ./test et ./test2 avec confirmation.

Il aurait pas une commande a faire du genre qui fonctionnerait ?
grep -r "salut" . | xargs rm


J'ai trouvé ceci qui fonctionne mais sans confirmation:
find . -type f | xargs grep -l "salut" | xargs rm


J'aimerais donc utiliser le rm -i, mais ici à cause du output ça ne fonctionne pas.

Des solutions ?

Merci !

1 réponse

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Voici comment tu peux faire :

for x in $(grep -r "salut" /home/toto | cut -d":" -f1); do rm -i "$x"; done


Si tu n'avais pas eu besoin du mode interactif, tu aurais pu écrire :

grep -r "salut" /home/toto | cut -d":" -f1 | xargs rm -f


Le problème c'est qu'avec cette deuxième version, si tu remplaces "-f" par "-i" tu ne pourras pas répondre aux questions de confirmation (car le pipe "parallèlise" les différents appels fait à rm, contrairement à la boucle for qui les déclenche un par un).

Bonne chance
3
enyrix Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   8
 
Merci, c'est en effet ce que je cherchait !
Petite correction par contre, tu as oublié de mettre le path après la chaine grep:
Version testé fonctionnelle:
for x in $(grep -r "salut" /tmp/test | cut -d":" -f1); do rm -i "$x"; done

ou pour le répertoire courant:
for x in $(grep -r "salut" . | cut -d":" -f1); do rm -i "$x"; done
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Effectivement, je corrige mon message en conséquence, merci pour ta remarque :)
0