Script, welches Dateien nach einer bestimmten Zeit löscht

oe7

Aktives Mitglied
Thread Starter
Dabei seit
18.03.2004
Beiträge
322
Reaktionspunkte
17
Hi,

Ich bin auf der Suche nach einem Script, welches automatisch einmal im Monat startet und 2 Ordner durchsucht nach Dateien, die älter als 8 Wochen sind und diese löscht.
Gibt es sowas?
Bin für Tips und Hinweise dankbar!

gruß

oe
 
an sich braucht das nur ein kommando
Code:
find /pfad/zu/verzeichnis -mtime +8w -delete
zum testen kannst ja erst mal das -delete weg lassen.
 
Ja, kannst Du ein wenig Applescript oder brauchst Du eine fertige Lösung?

Ich hatte mal ein Script geschrieben das diese Aufgabe erledigen kann müsste aber noch an Deine Bedürfnisse angepasst werden.
Kannst ja mal rauskramen was Dir nützt:

Code:
property modDate : ""
activate
deletIt(choose folder multiple selections allowed yes)
on open (var)
    deletIt(var)
end open

on deletIt(var)
    set posPath to POSIX path of item 1 of var
    repeat
        try
            set modDate to text returned of (display dialog "Delete older then how many days?" default answer modDate with title posPath with icon 1) as number
            if modDate < 1 then error
            exit repeat
        on error number ernmb
            if ernmb = -128 then error number -128
            display alert "Value has to be a number greater then 0" as critical
        end try
    end repeat
    set {dateVar, endlist, amount} to {current date, "", 45}
    repeat with x in var
        tell application "Finder"
            try
                set {fiList, pathName} to {(name of files of entire contents of folder x whose modification date is less than dateVar - modDate * days), name of container of x}
            on error erstrg number ernmb
                display alert erstrg message ernmb as critical
                return
            end try
        end tell
    end repeat
    repeat with y in fiList
        if (count paragraphs of endlist) ≤ amount then
            set endlist to endlist & " " & y & return
        else
            set endlist to endlist & " and " & (count item of fiList) - amount & " more...‼️"
            exit repeat
        end if
    end repeat
    display alert "Move files in " & quoted form of pathName & " to the trash?" message endlist buttons {"Cancel", "Trash"} cancel button "Cancel" default button "Trash" as critical
    repeat with x in var
        tell application "Finder"
            try
                delete (files of entire contents of folder x whose modification date is less than dateVar - modDate * days)
            on error number ernmb
                display alert ernmb as critical
            end try
        end tell
    end repeat
end deletIt
 
Danke schonmal für die superschnellen Antworten!

Leider brauche ich eher eine fertige (oder fast fertige) Lösung, weil zu doof zum selber Scripten..
@oneOeight: wie packt man das nochmal in ein bash-script und lässt es dann als cronjob laufen? Ich habe das vor vielen Jahren mal gemacht, habe aber alles vergessen, wie das geht..
Mit Applescript kenne ich mich praktisch garnicht aus leider.
Danke für weitere Hilfe !
 
cron ist doch deprecated, mach dir einen launchd job.
(soll doch auf einem mac laufen, oder?)
gibt doch einige tools die dir helfen den job zu erstellen.
 
daran siehst du, das ich nicht up to date bin :) (Bin allerdings auch noch auf El Captain..?)
Welche Tools?

Dank!
 
So, habe es jetzt geschafft 2 shellscripts zu erstellen (kann man die auch in eines zusammenpacken?)
Das LaunchControl kostet 13€, das ist mir eigentlich für eine GUI, die ich nur einmal brauche zuviel. Wie erstellt man einen Launchagenten, der alle 4 Wochen das (oder die) scripts aufruft?
Danke für eure Geduld!
 
Sonst schau Dir mal Hazel von Noodlesoft an
Das ist ja noch teurer!?

Ja, zeig mal her das Script.
Das was oneOeight vorgeschlagen hat:
----------------
#!/bin/bash
#Reaper_Autosavefiles älter als 8 Wochen löschen
find /Volumes/Audio/Anwendungen/REAPER_Autosave_Files_every_5min -mtime +8w -delete
----------------
Das 2. Script genauso, wie kombiniere ich die denn in eines?
Und wie bastel ich dann einen Launchagenten, der das script alle 4 Wochen ausführt..?
 
Das ist ja noch teurer!?
Kann aber noch eine ganze Menge mehr.
Nur für diesen einen Zweck wär's overdressed.


Ein LaunchAgent ist eigentlich nur eine kleine plist-Datei, der auf das zu startende Skript verweist (mit Pfad) und das gewünschte Intervall angibt (oder auch feste Uhrzeiten). Da zu gibt es bei Apple und im Netz einige Anleitungen. Die Datei hat ein fixes Format und wird in den entsprechenden Ordner abgelegt, den der launchd-Daemon überwacht (z.B. ~/Library/LaunchAgents). Das ist kein Teufelswerk (jedenfalls weniger als das Skript zu schreiben, das dann die Dateien löscht, ohne Risiko, die falschen zu eliminieren).
Sag ich jetzt mal so, ohne eigene Praxis…
 
So, mittlerweile habe ich mir LaunchConrol gekauft, bin jetzt aber sehr frustriert, weil ich Fehler -1 bekomme 'this job has failed for no apparent reason'
Kann bitte mal jemand schauen, was da schief läuft?

Danke!

Mein .sh script:
Code:
#!/bin/bash

touch ~/Desktop testdatei

sleep 5s

rm ~/Desktop testdatei

Mein launchjob (liegt in ~/Library/LaunchAgents):
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>local.job</string>
   <key>Program</key>
   <string>/Users/ole/Desktop/test.sh</string>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

wie gesagt, funktioniert nicht (error -1 in LaunchControl), warum?
 
Hallo,
Geiz ist geil !
Hazel ist noch für viele andere Aufgaben zu gebrauchen und deshalb sein Geld Wert !
 
  • Gefällt mir
Reaktionen: Bozol und GrandmasterD
Du musst wohl noch das Executable-Bit für die Datei setzen, um eine Ausführung zu erlauben.

chmod +x /Users/ole/Desktop/test.sh
 
#!/bin/bash

touch ~/Desktop testdatei

sleep 5s

rm ~/Desktop testdatei
[/code]
[..]

wie gesagt, funktioniert nicht (error -1 in LaunchControl), warum?

Dazu kommt, dein Shellskript scheint mir auch nicht richtig zu sein, ...

Was soll das machen? Wenn ich mit rm einen Ordner löschen will, habe ich einen exit status != 0 (Linux), weil offensichtlich nur teilweiser success.

Code:
 $ mkdir test
 $ touch test eeeeeee                                                                                                                         
 $ rm ~/test eeeeeee
rm: cannot remove ‘/home/xen/test’: Is a directory
rm: remove regular empty file ‘eeeeeee’? y                                                                                      
 $ echo $?
1

YMMV. Ich hab keine Ahnung wie lanchd exit codes != 0 bewertet.
 
Zudem wohl nicht gerade der gewünschte Effekt, den Desktop auszuradieren :D
 
Zurück
Oben Unten