Grep avec rm
Résolu
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:
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 ?
J'ai trouvé ceci qui fonctionne mais sans confirmation:
J'aimerais donc utiliser le rm -i, mais ici à cause du output ça ne fonctionne pas.
Des solutions ?
Merci !
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
Voici comment tu peux faire :
Si tu n'avais pas eu besoin du mode interactif, tu aurais pu écrire :
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
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
Petite correction par contre, tu as oublié de mettre le path après la chaine grep:
Version testé fonctionnelle:
ou pour le répertoire courant: