7 berichten aan het bekijken - 1 tot 7 (van in totaal 7)
  • Q:
    Bijdrager
    dborneman

    Bestanden automatisch laten verwijderen

    Ik heb vandaag wat beveiligingscamera’s voor thuis ingesteld waarbij bestanden vanaf het SD kaartje in de camera als back-up worden overgezet op een FTP server. Deze FTP server draait op een Mac Mini SL server editie.

    Wat ik graag zou willen is dat ik de map waarin de bestanden staan een maximum grootte geef bv. 10 GB en dat de oudste bestanden worden verwijderd op het moment dat deze quota is bereikt.

    Is er een manier waarmee ik dit kan bereiken?

    Bijdrager
    Ree

    De componenten
    ls -ltr1 : geeft bestandsnamen in de directory gesorteerd van oud naar nieuw
    head -n 5 : pak de eerste 5 regels van de uitvoer
    du -ck . : geeft disk usage weer van de huidige directory, in kilobytes
    egrep : reguliere expressie matching
    IFS=$’\n’ : gebruik alleen regeleinden als scheidingsteken (anders zijn spaties en tabs dat ook)

    in totaal:

    open de terminal
    type :

    touch cleanup.sh
    chmod 755 cleanup.sh
    open -t cleanup.sh

    en plak onderstaande code daarin.

    <br />
    #!/bin/sh<br />
    # hoeveel mag er zijn?<br />
    MAX=19000000<br />
    # bijna 19 gig, geen zin om 19x1024x1024 te berekenen</p>
    <p>IFS=$'\n'<br />
    [ <code>du -ck . | head -n 1 | egrep -o "^[0-9]+"</code> -gt $MAX ] && for i in <code>ls -ltr1 | head -n 5</code>; do rm "$i"; done<br />
     

    hier staat, vrij vertaald

    bekijk de ruimte die deze dir inneemt, in kilobytes, neem van het resultaat enkel de eerste regel, en daarvan alleen de getallen die in het begin van de regel staan.
    Vergelijk deze met de waarde van MAX, en als deze groter is ( -gt ) is de waarde van de hele expressie
    ( [ t/m ] ) true.

    de operator && zegt; als hetgeen ervoor staat true is, dan uitvoeren.
    dus, bij overschrijden van MAX wordt het tweede deel uitgevoerd wat , vrij vertaald, dit doet

    haal een lijst op van bestanden, enkel de bestandsnamen, oudste eerst. Neem daarvan de eerste 5 en voor elk van die 5 wordt het rm commando uitgevoerd, wat het bestand verwijderd.

    dit voer je uit door dit commando:
    cd /Pad/naar/de/bestanden && /Pad/naar/cleanup.sh

    waarschuwing:

    er is geen weg terug. gewist is gewist.
    ik heb dit script geschreven op basis van voor mij bekende elementen, maar heb het niet in geheel getest
    ik ben niet verantwoordelijk voor schade in wat voor vorm ook.

    Wil je zekerheid? vervang dan rm “$i” door echo $i wordt gewist en je ziet eerst wat het script zou doen.

    Bijdrager
    Ree

    ow, en natuurlijk om dit geautomatiseerd te doen, bijvoorbeeld eens per uur, moet dit ingeregeld worden in de CRON.

    in de terminal type

    export EDITOR=nano
    crontab -e

    de nano editor presenteert je een bestand, misschien leeg, misschien niet.
    voeg onderaan deze regel toe:

    0 * * * * cd /Pad/naar/de/bestanden && /Pad/naar/cleanup.sh

    0 * * * * betekent; elke 0-de minuut van elk (*) uur van elke (*) dag in elke (*) maand op elke (*) weekdag.

    voor meer info; google is your friend.

    Bijdrager
    dborneman

    Wow dat is een stuk moeilijker dan ik in eerste instantie had verwacht! Kan ik de door jou gegeven code gewoon letterlijk copy + pasten inclusief commentaar dat je erbij hebt geschreven?

    dan bedoel ik:

    <br />
    #!/bin/sh<br />
    # hoeveel mag er zijn?<br />
    MAX=19000000<br />
    # bijna 19 gig, geen zin om 19x1024x1024 te berekenen</p><p>IFS=$'\n'<br />
    [ <code>du -ck . | head -n 1 | egrep -o "^[0-9]+"</code> -gt $MAX ] && for i in <code>ls -ltr1 | head -n 5</code>; do rm "$i"; done<br />
     
    Geblokkeerd
    Anoniem

    Joh, je kan ook eens kijken naar “logrotate”. Dat zit volgens mij ook gewoon meegeleverd met OS X.

    Bijdrager
    Ree

    het blok wat tussen de code tags staat is 1 op 1 te kopieren in het bestand.

    En cailin, kun je een werkend voorbeeld van logrotate geven? dat klinkt namelijk interessant.

    Geblokkeerd
    Anoniem

    Zou ik willen, maar ik zie dat het toch niet meegeleverd zit:(

    Het is wel onderdeel van DarwinPorts, dus het is op zich gemakkelijk te installeren. Punt is dat je dan niet meer zelf aan het scripten hoeft en dat LR alles voor je uitdoktert.

    http://logrotate.darwinports.com/

7 berichten aan het bekijken - 1 tot 7 (van in totaal 7)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.