Synology-Forum.nl
Firmware => Synology DSM algemeen => Topic gestart door: hans114 op 26 april 2014, 16:22:32
-
Kent iemand een manier om periodiek bestanden uit een gedeelde map te verwijderen? Ik wil graag, wellicht via een crontask o.i.d., bestanden ouder dan een week automatisch laten verwijderen.
-
Dit zou je in de Taak Planner kunnen zetten en dan plannen:
find /volume1/<shared map>/* -mtime +5 -exec rm {} \;
-mtime +<n>
Hiermee geef je aan files ouder dan, in dit geval, 5 dagen.
-
Bedankt, ik ga ermee aan de gang.
-
Hoor graag terug of het je gelukt is ;)
-
Dag Birdy,
Wanneer ik de task "find /volume1/snap/* -mtime +1 -exec rm {} \;" laat uitvoeren worden bestanden van gisteren die ouder zijn dan (nu) 24 uur niet verwijderd. Als ik de task "find /volume1/snap/* -exec rm {} \;" laat uitvoeren worden alle bestanden verwijderd.
Het zou kunnen dat het systeem niet checkt op de tijd van de te verwijderen files maar op alleen op datum. Ik weet dat pas als we een dagje verder zijn.
Groet, Hans.
-
Om te beginnen:
Als ik de task "find /volume1/snap/* -exec rm {} \;" laat uitvoeren worden alle bestanden verwijderd.
Dat klopt helemaal.
"find /volume1/snap/* -mtime +1 -exec rm {} \;" laat uitvoeren worden bestanden van gisteren die ouder zijn dan (nu) 24 uur niet verwijderd.
Probeer eens (heb zelf niet zo'n zin/tijd om zelf te testen ;) ), maar dit moet meer exact zijn: -mmin +$((60*24))
"find /volume1/snap/* -mmin +$((60*24)) -exec rm {} \;"
-
Dat werkt als een zonnetje, bedankt!
-
Ha.....cool 8)
Have fun.
-
wordt bij deze code ook de bestanden uit de sub-folders verwijderd?
ik denk bijv. aan tvseries ( /volume1/sharedmap/tvserie/seizoen/*.1.mkv )
kan ik volstaan met de sharedmap of moet ik elke serie apart opgeven?
-
find /volume1/sharedmap/tvserie/seizoen/*.1.mkv -mmin +$((60*24)) -exec rm {} \;
Alle files in map /volume1/sharedmap/tvserie/seizoen/ van 1 dag en ouder die eindigen op .1.mkv worden verwijderd.
Geen probleem.
Je kunt overigens even testen door "rm" te vervangen door "ls" (bijvoorbeeld).
Wat je dan ziet zou verwijderd worden (rm).
-
Het volgende werkt voor mij na wat googlen en de voorzet van Birdy:
find "/volume1/sharedmap/" -depth \( -name *.1.mkv -type f \) -exec rm {} \;
het maakt voor mij niet uit hoe oud de bestanden zijn (schedule 1x per week)
Ik probeer nu in het script veld meerdere regels toe te voegen, omdat ik meerdere sharedmaps heb waar ik een soortgelijke cleanup wil uitvoeren. Dit werkt echter niet, is het wel mogelijk of moet ik meerdere script rules aanmaken?
-
In feite kun je in de taakplanner 1 regel ingeven echter, wanneer het meerdere regels gaat bevatten dan kun je beter een script maken en die aanroepen vanuit de taakkplanner.
Of je maakt meerdere taken aan voor elke (gedeelde) map.
-
Bedankt Birdy het werkt perfect. (toppie) :D
-
Mooi zo ;D
-
Hallo Birdy,
Doordat ik destijds (i.v.m. beperkingen surveillance station; inmiddels wel na RFC wel opgelost dor syology :thumbup:) er voor gekozen heb de opname van mijn hikvision via IVMS op mijn SS te laten plaatsvinden, loop ik nu tegen het feit aan dat de schijf vol raakt. Via IVMS heb ik geen optie om dat te laten overschrijven (oud tegen nieuw). Op het forum kom ik deze optie als script niet tegen. Wel de optie in deze topic om bestanden ouder dan x dagen te later verwijderen middels script. Jij geeft aan "-mtime +<n>
Hiermee geef je aan files ouder dan, in dit geval, 5 dagen." Verder lees ik dat dit niet werkt en men met een moeilijke formule aan de gang gaat. Dit begrijp ik niet zo, maar vindt -mtime +<n> vreemd. Zou niet -mtime - <n> de oplossing zijn?
Ik ben benieuw naar je antwoord. Thx
-
Alles kan echter, dan wordt het script anders, nu wordt er gezocht naar groter dan +n, dan verwijderen, met kleiner dan -n, dan niet verwijderen.
Lood om oud ijzer dus.
Verder lees ik dat dit niet werkt
find /volume1/sharedmap/tvserie/seizoen/*.1.mkv -mmin +$((60*24)) -exec rm {} \;
Werkt toch prima.
en men met een moeilijke formule aan de gang gaat.
Welke moeilijke formule bedoel je ?
Maar goed, met de -n werken en daarbij de nodige aanpassingen, kun je zelf toch wel even testen ? ;)
-
Wat ik wil bereiken is dat ik elke dag automatisch alle bestanden ouder dan 20 dagen wil laten verwijderen uit mijn folder volume1/Hikvision opname/camera 1. Met de optie find /volume 1/Hikvision opname/camera 1/ -mtime +24 –exec rm {} \; gebeurde er niets. Ik dacht dat +20 betekende 20 dagen na nu, vandaar de optie -20. Helaas werkt ook dit niet. Omdat ik $((60*24*24)) niet begrijp uiteindelijk find /volume 1/Hikvision opname/camera 1/* -exec rm {} \; geprobeerd. Geen van de bestanden in de directory werden gewist. Ook via het configuratiescherm -actie - resultaat bekijken kom ik niet verder. Ik zie geen gegevens bij Script en Standaard uitvoerfout. Het lijkt dat het script of programeercode niet wordt geaccepteerd. Welke programeercode heb jij gebruikt.
-
Het is geen berekening.
De + betekent ouder dan en de - nieuwer dan.
En beter lezen is ook wel handig er staat toch duidelijk in dit topic dat na de modificatie het prima werkt.
Het foutje zat in het feit dat er initieel gedacht werd dat het in dagen moest (de +1) maar het moet in minuten (60*24).
De werkende regel is dus:
"find /volume1/snap/* -mmin +$((60*24)) -exec rm {} \;"
PS Als je dat een moeilijke regel vind zou je kunnen googlen wat de verschillende delen betekenen of eventueel hier vragen.
-
Welke programeercode heb jij gebruikt.
Linux en DSM is een Linux variant.
Jij geeft aan -mtime +<n>
Nee, uiteindelijk geef ik aan -mmin +<n>
find /volume1/sharedmap/tvserie/seizoen/*.1.mkv -mmin +$((60*24)) -exec rm {} \;
-mmin +$((60*24))
Het voorbeeld is gebaseerd op 1 dag en ouder dus, wil je 2 dagen en oude dan is het -mmin +$((60*48))
Overigens,
/volume 1/Hikvision opname/camera 1/
"/volume 1" het script vindt dus nooit wat je zoekt, moet n.l. zijn "volume1"
Hikvision opname
Heet die gedeelde map ook "Hikvision opname" ?
Dus, Hoofdletter "H" en er zit een spatie tussen "Hikvision" en "opname" ?
Zelfde voor "camera 1"
Dus, zit er een spatie tussen "camera" en "1" ?
Mappen en files zijn in Linux case sensitive.
Betreft -mtime +of- en -mmin +of- "er zijn vele wegen die naar Rome leiden" uiteindelijk was "-mmin +<n>" de beste keuze en werkt prima maar, dan moet je het wel goed doen b.v. "volume1"
-
Birdy op voorhand al bedankt voor de snelle reactie. Je uitleg komt mij duidelijk over, ook wat betreft mtime +$((60*24)). Probleem is alleen dat er niks is gebeurd nadat ik het script laat uitvoeren. Ik doe iets verkeerd, maar weet dus niet wat. Ik heb ook al de diverse spaties weggehaald maar zonder resultaat. Ik zag dat ik de Hoofdletter V bij volume was vergeten maar ook dat geeft geen resultaat.
Nogmaals (zie bijlage) ik denk dat het bij mij echt Volume 1 is. Dus met Hoofdletter V en spatie tussen Volume en 1. Verder heb ik de directory volledig gekopieerd. M.a.w. ook daar moeten de hoofdletters en spaties goed staan. Zowel aangevuld met de opties /* -exec rm {} \; als ook met /* -mtime +$((60*24)) –exec rm {} \; en /* -mtime +20 –exec rm {} \; geeft dit geen resultaat.
Ik heb de taakplanner in de SS geopend. Daarna via Maken- Geplande Taak en Door gebruiker gedefinieerde script het ik de taak aangemaakt. Daartoe heb ik als Gebruiker gekozen voor admin, Planning op dagelijks en in het Veld Door de gebruiker gedefinieerde script bijv. find/Volume1 /Hikvision opname/camera 1/* -exec rm {} \; gekopieerd. Daarna heb ik deze taak geselecteerd en op uitvoeren gedrukt. In de betreffende directory is dan niks gebeurd. Als ik hierna de taakregel nog eens selecteer en via Actie - Resultaat bekijken het beschouw levert dat voor mij drie vraagtekens op (zie bijgevoegd bestand Resultaat uitvoeren). Er gaat dus zeker wat fout. Ik ben hierin helaas een groentje. Heb jij enig idee of heb jij een eenvoudig script om e.e.a. uit te sluiten/ te testen?
Thx
-
…ik denk dat het bij mij echt Volume 1 is. Dus met Hoofdletter V en spatie tussen Volume en 1.…
In het "volume1" zit echt geen spatie. Verder mag je geen spaties in een script gebruiken als het een filenaam of pad betreft. Je moet de spatie dan laten vooraf gaan door een escape karakter. Lees je nog wat verder in, in de linux syntax als je een script wilt schijven. Want een script van slechts één regel is bij mij geen moeilijk script, zoals je elders schrijft.
-
Het is NIET Volume 1 en NIET Volume1 het IS volume1 zoals ik ook in het script heb aangegeven, nogmaals dan:
find /volume1/sharedmap/tvserie/seizoen/*.1.mkv -mmin +$((60*24)) -exec rm {} \;
Kijk in PuTTY, de mount is volume1 en daar kijkt het script naar en niet wat je in je browser ziet.
Browser:
[attachimg=2]
PuTTY (Linux):
[attachimg=1]
Mappen MET spaties zet je tussen quotes: "Map met spaties"
-
gedefinieerde script bijv. find/Volume1 /Hikvision opname/camera 1/* -exec rm {} \; gekopieerd.
is ook helemaal fout dus, jouw voorbeeld moet zijn:
find /volume1/"Hikvision opname"/"camera 1"/* -exec rm {} \;
Heb jij enig idee of heb jij een eenvoudig script om e.e.a. uit te sluiten/ te testen?
Je kunt testen op de Command Line in PuTTY (http://www.synology-forum.nl/algemeen/nas-benaderen-met-ssh-winscp-putty/):
Dus jou voorbeeld weer gebruikende:
[attachimg=1]
-
Poe :'(, ik durf bijna niet meer te reageren. Vind mijzelf zelfs geen groentje maar meer een zaadje wat dit betreft. Desalniettemin heb je mij al weer een heel eind op pad geholpen. Om te testen heb ik op de SS een directory TEST aangemaakt en daaronder een directory Oud bestand (Expres getest met hoofdletters en spaties). Als eerste het script find /volume1/TEST/* -exec rm {} \; geprobeerd. En ja hoor Bij resultaat bekijken stond bij Huidige status: Normaal (0). Geen fouten dus en alle eerder geplaatste bestanden weg; zowel uit de directory TEST als Oud Bestand. :) Hierna nieuwe bestanden met een datum ouder dan 10 dagen geplaatst en het script find /volume1/TEST/* -mtime +10 -exec rm {} \; geprobeerd. Ook dit was succesvol. :thumbup:
Toen alleen in de directory Oud bestand bestanden met een datum ouder dan 10 dagen geplaatst. Toen het script laten draaien op alleen deze directory met jouw aanbeveling van de aanhalingstekens ("). Script was daarbij find /volume1/TEST/”Oud bestand”/* -mtime +10 -exec rm {} \; Daar gaat het nog fout. Bij resultaat bekijken stond bij Huidige status: Onderbroken (1). Conclusie is dus dat het fout gaat bij een directory met een spatie in de naam. De "-tekens lossen het niet op. Ik las nog ergens dat '-tekens ook zou kunnen, maar ook dat werkt niet. :twisted:
Tja...
-
Je moet de hele filespecs tussen apostrofs zetten.
Dus zo:
find '/volume1/TEST/Oud bestand/*' -mmim +10 -exec rm {} \;
Houd je er wel rekening mee dat die +10 maar 10 minuten betekent en niet 10 dagen.
-
Conclusie is dus dat het fout gaat bij een directory met een spatie in de naam.
Foute conclusie, heeft er niets mee te maken, je gebruikt -mtime (i.p.v. -mmin), mappen met spatie tussen quotes werkt gewoon.
Heb dus maar even getest voor je:
[attachimg=1]
En jij wilt -mtime gebruiken ? Prima hoor, wat jij wilt maar, dan werkt het dus ook anders, voorbeeld:
[attachimg=2]
Bij mtime telt alleen hele dagen (dus, doet afronden op hele dagen) en als je groter dan wilt moet je nog eens -1 dag doen dus, wordt het -mtime +9
Doe je het dan op mijn manier dus met -mmin, dan wordt het exact en niet afgerond.
[attachimg=3]
Snappie ?
-
Je moet de hele filespecs tussen apostrofs zetten.
Of het escape karakter "\". gebruiken voor de speciale tekens zoals een spatie.
find /volume1/TEST/Oud\ bestand/* -mmim +10 -exec rm {} \;
Maar ik moet toegeven dat apostrofs het leesbaarder houden.
-
MOD: Niet onnodig (alles) quoten.
Ik word er moedeloos van, heb alles geprobeerd. Zou je bereid zijn middels teamviewer mee te kijken?
-
Dit werkt: find /volume1/TEST/* -mtime +10 -exec rm {} \;
Dit werkt: find /volume1/TEST/"Oud bestand"/* -exec rm {} \;
en de combinatie: find /volume1/TEST/"Oud bestand"/* -mtime +10 -exec rm {} \; werkt nu eindelijk ook. Lijkt dus goed te gaan komen. Waarom het eerder niet werkte is voor mij een raadsel. Allen hartelijk bedankt.
PS Putty is voor mij nog echt een brug te ver. Is er ergens een nederlandse uitleg?
-
Had je al een link gegeven over PuTTY echter, je kent geen Linux, ben ik inmiddels wel achter dus, wel een beetje gevaarlijk.
-
Had je al een link gegeven over PuTTY echter, je kent geen Linux, ben ik inmiddels wel achter dus, wel een beetje gevaarlijk.
Ja ik had Putty zelf al gedownload maar echt nog een brug te ver. Heb denk ik ook een idee waarom het nu wel ineens werkte. Schijnbaar is er een verschil tussen aanhalingstekens. Je hebt blijkbaar “ en ". Het ene teken komt van mijn toetsenbord en het andere uit het voorbeeld wat ik van het forum had gekopieerd.
Ga toch kijken voor wat Putty leesvoer voor tijdens de kerst ;)
Nogmaals bedankt.
-
Dat is een heel verschil in Linux: “ en " :lol:
-
En daarom moet je ook een code editor gebruiken. Bij gewone teksteditors wordt een ingetikte " soms ongemerkt in een ” veranderd. Is mij ook wel eens gebeurd.
-
Een ' gebruiken in plaats van " voorkomt ook veel verwarringen.
-
Kent shell script ook een rangorde in quotes, zoals in JavaScript? Daar kun je ook enkele en dubbele quotes gebruiken voor een string.
Als je dan een quote in de string wilt hebben, moet je de string van de andere quote voorzien. b.v.:
string1="It's five o'clock!";
string2='<A HREF="index.htm">';
-
Ik ben net nieuw hier en heb eigenlijk een account aan gemaakt om hier op te reageren ik zou namelijk graag willen vragen of jullie me kunnen helpen. Ik heb zelf een NAS gebouwd. Hier op heb ik sinds vandaag een camera aangekopeld en ik wil dat het beeld matriaal dat ouder is dan 30 dagen wissen. Ik snap alleen niet helemaal hoe je het in zou moeten stellen welke map hij wist. in de map heb ik twee mappen staan met film en foto's van de camera. In beide moet dit worden gedaan. Alvast bedankt voor jullie hulp.
-
Ik heb zelf een NAS gebouwd.
Interessant, wat voor een Synology NAS heb je zelf gebouwd ?
-
Geen synology. Maar eentje van mijn oude pc.
-
O....nou....dit is een Synology Forum, misschien moet je maar naar een Linux Forum gaan.
-
Afgezien daarvan: Het antwoord stond toch al in dit draadje? Gewoon teruglezen en niet alleen de titel lezen.