linux cronjob voor verwijderen van files

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • sdk1985
  • Registratie: Januari 2005
  • Laatst online: 01-10 16:10
Is er iemand die mij wil helpen met de syntax van een cronjob? Hij moet het volgende doen

-Recursief werken binnen de map /home/user/domainds/domain.com/public_html/wp-content/uploads (dus -R)
-Alle bestanden die bestaan uit *x*.jpg die niet in de laatste 24 uur zijn "accessed" verwijderen ( -atime +1 en find . -name *-*x*.* | xargs rm -f)
-Als het even kan de 60x60.jpg negeren anders krijg ik kruisjes in de Wordpress backend.

Kom niet helemaal uit de syntax.

Achtergrond:
Ik gebruik momenteel een redelijk onhandige routine om een website folder op te ruimen. Het probleem is dat van elk plaatje diverse thumbnails worden genereerd. Echter vrijwel al deze kleine versies zijn alleen nodig indien het plaatje "featured" is. Resultaat is dat elke file echter wel 5-10x meer ruimte inneemt.

Momenteel ruim ik dit af en toe door alle files te downloaden en op Windows op via een batch file alles op te ruimen. Vervolgens de "featured" weer te uploaden. Er gaat nog weleens een plaatje verloren op deze manier.
del *-150x*.jpg
del *-160x*.jpg
del *-240x*.jpg
del *-287*.jpg
del *-319*.jpg
del *-321*.jpg
del *-578*.jpg
del *-639*.jpg
del *-740*.jpg
del *-850*.jpg
del *-1280*.jpg
del *x160.jpg
del *x400.jpg
del *-306*.jpg

del *-150x*.png
del *-160x*.png
del *-240x*.png
del *-287*.png
del *-319*.png
del *-321*.png
del *-578*.png
del *-639*.png
del *-740*.png
del *-850*.png
del *-1280*.png
del *x160.png
del *x400.png
del *-306*.png

Hostdeko webhosting: Sneller dan de concurrentie, CO2 neutraal en klantgericht.


Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 26-08 22:21
Je bent er bijna, regex heeft zijn eigen parameter -regex en gebruik je los van -name, met de -E helemaal aan het begin hoef je niet alle karakters in de regex te escapen. find genereert een lijst van bestandspaden en die kan je inderdaad pipen naar xargs, maar voordat je dat doet kan je met behulp van grep -v bestandspaden uit deze lijst filteren. Je krijgt dat zoiets als:

find -E uploads/ -type f -regex ".*x.*\.(png|jpg)" -atime +1 | grep -v -E "60x60.(png|jpg)" | xargs rm


(Ik heb het even pad expres verkort)

Test vooral zonder | xargs rm om te kijken of er bestanden tussenzit die je niet wilt verwijderen ;)

[ Voor 8% gewijzigd door C0rnelis op 13-10-2014 20:22 ]


Acties:
  • 0 Henk 'm!

  • sdk1985
  • Registratie: Januari 2005
  • Laatst online: 01-10 16:10
Dat zit er goed uit!

Vooral die grep scheelt me een hoop werk (anders moet ik die 60x60 weer per maand folder gaan uploaden). Bedankt :).

Is er overigens ook een variant op -atime die op halve dag basis werkt? Merk namelijk dat alles gisteren om 23:00-23:02 is geaccessed ivm auto backup. De rest zit op vandaag +- 20:00 via Xenu Link Sleuth.

Hostdeko webhosting: Sneller dan de concurrentie, CO2 neutraal en klantgericht.


Acties:
  • 0 Henk 'm!

Verwijderd

Nope. Het is erg gevaarlijk om het op die manier te doen. Als er een grapjas een directory aanmaakt die eindigt op een spatie en vervolgens een directory '/usr ' met daarin een matchend bestand dan ben je het bokje. Doe dit in 1 commando door de negation ook door find te laten doen.
find uploads/ -type f -atime +1 ! -name '*60x60*' -regex 'lalala' -delete

-E is overigens niet geweldig portable.
Als -delete niet ondersteund wordt, gebruik je eventueel -print0 | xargs -0 rm of -exec rm '{}' ';'
sdk1985 schreef op maandag 13 oktober 2014 @ 20:30:

Is er overigens ook een variant op -atime die op halve dag basis werkt?
-amin +720

[ Voor 18% gewijzigd door Verwijderd op 13-10-2014 20:53 ]


Acties:
  • 0 Henk 'm!

  • sdk1985
  • Registratie: Januari 2005
  • Laatst online: 01-10 16:10
Krijg eigenlijk met beide syntaxen geen resultaten op CentOS 6.5.

Bij de eerste: unknown predicate `-E'
Bij de tweede geen resultaten.

Zit denk ik een fout in de regex, die returned niets.

edit:
Na heel veel tobben werkt dit
find /home/user/domains/.com/public_html/wp-content/uploads/ -type f -amin +720 -regextype posix-extended -regex ".*x.*\.(png|jpg)" | grep -v "60x60" > findresult2015.txt

Krijgt dan 2207 resultaten.

Heb twee problemen
1) Dit wordt ook onterrecht opgikt in verband met de letter X. payday2-ammo-usage-maximize-your-kills-snipers.png. Alleen de versie met -1280x400.png had op de lijst mogen staan. Krijg alleen het streepje niet in de regex.

2) Er staatn helaas files tussen die er niet tussen horen te staan. Heb even met "stat filename" gekeken en het blijkt dat deze files inderdaad niet zijn geactiveerd tijdens mij Xenu crawl. Xenu heeft de pagina wel bezocht, maar het plaatje niet opgehaald. Mogelijk omdat het een css background image is. Workaround is eventueel een plugin die ALLEEN de "post images" regenerate.

edit2:
Probleem met streepje opgelost.
find /home/user/domains/.com/public_html/wp-content/uploads/ -type f -amin +720 -regextype posix-extended -regex ".*-*x.*\.(png|jpg)" | grep -v "60x60" > postdelete.txt


Helaas luistert de "ajax-thumbnail-rebuild" niet goed naar mijn thumbnail knip settings (top,center). Dus ik kon handmatig alle featured images met 1280x400 weer uit een backup terug gaan zetten (89 stuks) |:( . Heb dus een betere craweler nodig, of een betere thumb renegerator.

[ Voor 230% gewijzigd door sdk1985 op 14-10-2014 04:55 . Reden: anonimiseren vergeten ]

Hostdeko webhosting: Sneller dan de concurrentie, CO2 neutraal en klantgericht.


Acties:
  • 0 Henk 'm!

  • TheMazzter
  • Registratie: Oktober 2006
  • Laatst online: 25-09 09:29
Als je x altijd tussen digits staat kun je je regex daar naar laten zoeken, bijvoorbeeld met zo'n string: ".*\-\d+x\d+.*\.(png|jpg)"

Acties:
  • 0 Henk 'm!

  • sdk1985
  • Registratie: Januari 2005
  • Laatst online: 01-10 16:10
Dat is inderdaad altijd het geval! Bedankt voor de suggestie :).

Hostdeko webhosting: Sneller dan de concurrentie, CO2 neutraal en klantgericht.

Pagina: 1