cron+ find subdirs verwijderen ouder dan 'x' dagen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 29-09 11:14

xces

To got or not to got..

Topicstarter
Met het volgende cron commando kan ik bestanden ouder dan 30 dagen verwijderen.
code:
1
cd /hosting/.../cache/gfx/thumb/; find . -type f -atime +30 -exec rm -rf {} \;


Nu kan het zijn dat er in "thumb" ook subdirectories worden aangemaakt, dus dacht ik; laat ik het commando zo maken;
code:
1
cd /hosting/.../cache/gfx/thumb/; find . -atime +30 -exec rm -rf {} \;


Maar nu krijg ik de (logische en begrijpelijke) cron e-mails dat hij directory "." niet kan verwijderen. Hoe kan bovenstaande dan beter?

De reden dat ik eerst een cd doe is omdat je een error krijgt als die dir niet bestaat, en ik zodoende niet find en -rf op mijn hele filesystem doe :) Als er een betere oplossing is (veiliger?) dan hoor ik dat natuurlijk graag.

Acties:
  • 0 Henk 'm!

  • trinite_t
  • Registratie: Maart 2003
  • Laatst online: 22-09 13:25
De cd kun je voorkomen door
code:
1
test -d /path && find /path ...
te gebruiken. Als het test commando ziet dat de directory bestaat returnt hij een 0, dan gaat && door met het volgende commando (find). Als de directory niet bestaat returnt test een 1 (error) waarnaar de executie afgebroken zal worden.

Verder kun je bij find ook -not gebruiken voor een expressie.

The easiest way to solve a problem is just to solve it.


Acties:
  • 0 Henk 'm!

Verwijderd

atime ?

Weet je zeker dat je weet wat je doet? Dat is namelijk iets anders dan je zegt.

Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 29-09 11:14

xces

To got or not to got..

Topicstarter
@trinite_t: goede tip, ga ik zeker gebruiken.

@Cheatah; Ja ik bedoel het wel maar zeg het verkeerd; bestanden die de afgelopen 30 dagen niet meer zijn aangeraakt (ze worden toch opnieuw gegenereerd als dat nodig is na bijv. 2 maanden).

Blijft alleen nog de foutmelding over, welke ik nu zo heb opgelost;
1) zoek naar oude bestanden
2) zoek naar oude directories

Het meest commando wat ik dan kan bedenken is;
code:
1
2
test -d <dir> && find <dir> -user <user> -group <group> -type f -atime +30 -exec rm -rf {} \;
test -d <dir> && find <dir> -mindepth 1 -user <user> -group <group> -type d -atime +30 -exec rm -rf {} \;


Rest nu nog de vraag hoe je zoiets in 1 regel kan combineren (met && of ; ?)

[ Voor 44% gewijzigd door xces op 18-01-2012 09:22 ]


Acties:
  • 0 Henk 'm!

  • trinite_t
  • Registratie: Maart 2003
  • Laatst online: 22-09 13:25
trinite_t schreef op woensdag 18 januari 2012 @ 08:24:
Verder kun je bij find ook -not gebruiken voor een expressie.
Dus om je "." probleem op te lossen:
code:
1
find <dir> -atime +30 -not -iname "."

The easiest way to solve a problem is just to solve it.


Acties:
  • 0 Henk 'm!

  • Ertepeller
  • Registratie: November 2010
  • Laatst online: 03-10 10:43
In plaats van:
code:
1
find . -type f -atime +30 -exec rm -rf {} \;


kun je ook doen:
code:
1
find . -type f -atime +30 -delete


De bestandsnaam is dan impliciet en hoef je niet op te geven met {}. Geeft ook minder problemen als er special characters in zitten als spaties e.d.

[ Voor 15% gewijzigd door Ertepeller op 18-01-2012 15:24 ]


Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 29-09 11:14

xces

To got or not to got..

Topicstarter
Dus dan krijgen we dit:
code:
1
test -d <dir> && find <dir> -user <user> -group <group> -atime +30 -not -iname '.' -delete

Acties:
  • 0 Henk 'm!

  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 27-09 18:28
find kent ook de optie '-mindepth', als je daar '1' voor opgeeft wordt '.' ook overgeslagen. '-type d' zorgt dat 'test -d' niet meer nodig is, volgens mij.

En weet je zeker dat je 'atime' bedoeld, en niet 'mtime' (of 'ctime')? 'atime' is de 'accesstime', al wordt die vaak niet bijgewerkt door in de mount opdracht 'noatime' op te geven voor performance.

Anyway, je krijgt dan zo iets:

code:
1
find <dir> -mindepth 1 -type d -user <user> -group <group> -mtime +30

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zie het ook niet zitten om hier atime voor te gebruiken hoor. Ik zie daar alleen heil in als je bijvoorbeeld bestanden moet verwijderen die de afgelopen x tijd niet eens zijn geopend. Of als je wilt kijken welke bestanden recent geopend zijn, bijvoorbeeld om te debuggen of hacks op te sporen.

Vandaar ook mijn opmerking. Ik zou in dit geval sowieso mtime gebruiken.
Pagina: 1