Verwijderen van bestanden met bepaalde inhoud

Pagina: 1
Acties:

  • Youk
  • Registratie: Augustus 2002
  • Laatst online: 14:02

Youk

Volvo For Life

Topicstarter
Ik ben momenteel bezig met een scriptje te schrijven om bestanden te verwijderen die een bepaalde inhoud hebben. Even proberen een situatieschets te geven zodat duidelijk wordt wat ik bedoel.

Je hebt een bepaalde directory structuur, met daarin verschillende tekstbestanden. Hiervan wil ik bv. alle bestanden verwijderen waar "regel 3" in voorkomt. Dan kan je dus gaan zoeken op de volgende manier:
code:
1
grep "regel 3" * -Rl

Dat geeft dan het volgende resultaat:
code:
1
2
3
4
5
mail1/new/file1
mail2/new/file6
mail3/new/file8
mail3/new/file9
mail3/new/file11

Dit heb ik dan proberen door te geven op de volgende manier:
code:
1
grep "regel 3" * -Rl | rm -f

Maar vanaf hier werkt het niet meer, geen foutboodschap, maar al mijn bestanden staan er nog. Ik heb het vermoeden dat ik hier ergens iets vergeet, maar ik kan het niet terugvinden.

Is er hier misschien iemand die mij kan verder helpen?

Volvo Classic Club Belgium


  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 07:58
code:
1
for i in `grep .......`; do rm -f $i; done;

rm leest nl stdin niet.

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 16-02 21:55

BoAC

Memento mori

Volgens moet dit ook werken
code:
1
rm -f `grep "regel 3" * -Rl`


Alleen denk ik dat et fout gaat als er een spatie in het bestandsnaam staat ;)

[ Voor 40% gewijzigd door BoAC op 23-09-2004 14:54 ]


  • mvdejong
  • Registratie: Juni 2000
  • Laatst online: 29-11-2024

mvdejong

When does the hurting stop ?

En als het over meerdere directories moet :

rm -f `find . -type f -exec grep -l "regel 3" {} \;`

The number of things that Arthur couldn't believe he was seeing was fairly large


  • Wilke
  • Registratie: December 2000
  • Laatst online: 13:43
Jelmer schreef op 23 september 2004 @ 14:47:
code:
1
for i in `grep .......`; do rm -f $i; done;

rm leest nl stdin niet.
Of je kunt natuurlijk gewoon doen 'grep ..... | xargs rm', dat doet hetzelfde maar is een stuk korter (zie 'man xargs' en test altijd eerst met 'echo' of een ander onschuldig commando!) ;)

xargs/find en rm, of in het algemeen scripting en 'rm' kunnen dodelijke combinaties zijn, dus let wel altijd goed op wat je doet.

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 16-02 21:55

BoAC

Memento mori

Wilke schreef op 23 september 2004 @ 15:34:
[...]


Of je kunt natuurlijk gewoon doen 'grep ..... | xargs rm', dat doet hetzelfde maar is een stuk korter (zie 'man xargs' en test altijd eerst met 'echo' of een ander onschuldig commando!) ;)

xargs/find en rm, of in het algemeen scripting en 'rm' kunnen dodelijke combinaties zijn, dus let wel altijd goed op wat je doet.
Gaat et dan wel goed met bestandsnamen met spaties of ziet hij die als apparte parameters :?
* BoAC test et liever niet vanwege die 'dodelijkheid' ;)

code:
1
# mpg123 `find | grep .mp3`

Ging bij mij ook altijd fout 8)7

[ Voor 13% gewijzigd door BoAC op 23-09-2004 15:49 ]


  • Wilke
  • Registratie: December 2000
  • Laatst online: 13:43
Hetzelfde probleem heb je met die 'for' methode.

Voor xargs: zie de optie '--null' of '-0', en bij grep het bijbehorende commando om zulke invoer te leveren: '-print0'

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 16-02 21:55

BoAC

Memento mori

Wilke schreef op 23 september 2004 @ 15:50:
Hetzelfde probleem heb je met die 'for' methode.
Gewoon een kwestie van quotes om $i ;)
Voor xargs: zie de optie '--null' of '-0', en bij grep het bijbehorende commando om zulke invoer te leveren: '-print0'
-print0 is een parameter voor find en niet voor grep ;)
Ik had dus dit moeten doen:
code:
1
#mpg123 `find -printf '"%p"\n' | grep .mp3

Thanks ;)

  • Wilke
  • Registratie: December 2000
  • Laatst online: 13:43
Okay, bij grep is het '-Z' of '-null'. Lekker consistent weer allemaal, maar het idee is wel duidelijk lijkt me.

  • Youk
  • Registratie: Augustus 2002
  • Laatst online: 14:02

Youk

Volvo For Life

Topicstarter
Wilke schreef op 23 september 2004 @ 15:34:
[...]

...
'grep ..... | xargs rm'
...
Mijn dank is groot voor de snelle hulp! Ik heb het kunnen oplossen met deze manier.

Dit script moet dienen voor het onderhoud van onze mailserver. Wanneer iemand een mail stuurt naar alle personen uit het adresboek, en dit in het "aan" veld, dan zijn er problemen met het ophalen van de emails met bepaalde mailcliënts. Tot nu toe moesten we dan handmatig overal het probleemmailtje verwijderen. Dankzij het scriptje waar dit in verwerkt zit, hebben we hooguit een half uurtje meer nodig.

Volvo Classic Club Belgium

Pagina: 1