1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

AppleScript + Geektool Problem

Dieses Thema im Forum "AppleScript" wurde erstellt von Samsas Traum, 24.03.10.

  1. Samsas Traum

    Samsas Traum Pommerscher Krummstiel

    Dabei seit:
    24.04.08
    Beiträge:
    3.030
    Moin,

    ich habe mir ein Script gebastelt, welches ansich Problemfrei läuft (ist auch nicht mein erstes Script).
    Allerdings führt Geektool es ums Verrecken nicht aus. Die einblendbare Statusanzeige, ist von Beginn an rot.
    Ich vermute das es an der Laufzeit des Scriptes liegt, denn ein Durchlauf liegt bei etwa 20 Minuten (Geektool wiederholungs Interval ist dementsprechend auf 6Std. eingestellt). Ich berechne mit den Script einige Datenmengen und Anzahlen von Dateien.

    Jemand eine Ahnung ob es wirklich an der Laufzeit liegen kann, oder ob ich doch lieber nach einem Fehler suchen sollte (im AS-Editor läuft es ja)?

    MfG
     
  2. Duck Dodgers

    Duck Dodgers Reinette de Champagne

    Dabei seit:
    06.12.09
    Beiträge:
    419
    Ist schwer zu sagen, ohne das Script und die GeekTool "Einstellungen" dazu zu sehen! Damit es auch Grün leuchtet, musst du auch einen Script-Return-Wert ausgeben.
     
  3. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Was tut das Script 20 Minuten lang?
    Gruß Pepi
     
  4. Samsas Traum

    Samsas Traum Pommerscher Krummstiel

    Dabei seit:
    24.04.08
    Beiträge:
    3.030
    Es hat einige TB nach Typen sortiert, die Anzahl ausgegeben, durchschnittliche Größen berechnet, berechnet wann welche Festplatte voll ist mit Hilfe der Daten wann wieviel neue Daten auf die Platte kamen usw. Habe jetzt einige Dinge im AS durch einfache Shell Scripte ersetzt, hat die Laufzeit erheblich verkürzt, und jetzt läuft es auch.
     
  5. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Wärest Du bereit Deine Skripte zu sharen? Klingt nicht uninteressant.
    Danke
    Gruß Pepi
     
  6. Samsas Traum

    Samsas Traum Pommerscher Krummstiel

    Dabei seit:
    24.04.08
    Beiträge:
    3.030
    Ansich klar, ich muss das nur vorher noch kurz für die Öffentlichkeit anpassen wenn ich zu Haus bin. WebDav Daten will ich jetzt nicht mit posten ;)
     
  7. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Was haben die Zugangsdaten im Skript verloren? :)
    Gruß Pepi
     
  8. Duck Dodgers

    Duck Dodgers Reinette de Champagne

    Dabei seit:
    06.12.09
    Beiträge:
    419
    Hört sich interessant an, wobei ich aber so langsam Platzprobleme auf meinem Desktop bekomme :)
     
  9. Samsas Traum

    Samsas Traum Pommerscher Krummstiel

    Dabei seit:
    24.04.08
    Beiträge:
    3.030
    So, schonmal die ersten Teile. Habe letztendlich das gesamte Script auch aufgeteilt, damit es besser auf den Desktop passt.
    Aber zur Funktion des jetzt kommenden Teils:
    Zuerst kommt eine Ordneraktion, welches das Veränderungsdatum (mit leicht zu machender Änderung auch Erstellungsdatum) aller hinzukommenden Dateien auf den aktuellen Tag bringt.
    Das Script ließt nun alle Dateien ein, sucht sich zu jeder Datei das Datum raus, rechnet es um in "Alter in Tagen". Nun wird für jede Datei welche nicht älter als eine Woche ist (auch leicht änderbar) die Größe abgefragt. Alle Dateigrößen der nicht eine Woche alten Dateien werden addiert. Nun wird der freie Festplattenplatz genommen, und durch das Volumen geteilt, welches in der letzten Woche neu hinzu kam. Daraus errechnet sich den die theoretisch Dauer bis die Festplatte voll ist, wenn man sein aktuelles "Arbeitstempo" beibehält.

    PS: Im Script muss noch die Festplatte angepasst werden, bei mir funktionieren auf Grund von TrueCrypt nur spezifische Festplatten Namen

    Hier die Ordneraktion:
    Code:
    on adding folder items to target_folder after receiving added_items
    	
    	tell application "Finder"
    		
    		set liste to every item of added_items
    		repeat with i from 1 to count liste
    			set dateien to item i of liste
    			set dateien to dateien as alias
    			do shell script "touch -m " & (quoted form of POSIX path of blubb)
    		end repeat
    		
    	end tell
    	
    	
    end adding folder items to
    
    
    Und das eigentliche Script:

    Code:
    tell application "System Events"
    	set modi to the modification date of every disk item of the disk "DEINE HD"
    	set i to 1
    	set gesamt to 0
    	repeat with i from 1 to count of modi
    		set modiitem to the item i of modi
    		set dateitag2 to (the day of modiitem)
    		set dateitag2 to dateitag2 * days
    		set dateimonat2 to (the month of modiitem)
    		set dateimonat2 to dateimonat2 * 30 * days
    		set dateijahr2 to (the year of modiitem)
    		set dateijahr2 to dateijahr2 * 365 * days
    		set datumtage2 to day of (current date)
    		set datumtage2 to datumtage2 * days
    		set datummonat2 to month of (current date)
    		set datummonat2 to datummonat2 * 30 * days
    		set datumjahr2 to year of (current date)
    		set datumjahr2 to datumjahr2 * 365 * days
    		set datum to datumtage2 + datummonat2 + datumjahr2
    		set dateiitem to dateitag2 + dateimonat2 + dateijahr2
    		set alter to (datum - dateiitem) / days
    		if alter is less than 8 then
    			set grosse to the size of disk item i of the disk "DEINE HD"
    			set gesamt to gesamt + grosse
    		else
    			set grosse to 0
    		end if
    	end repeat
    	set geteiltMB to (gesamt div 1000000) + 1
    	set geteiltGB to geteiltMB div 1000
    	set frei to free space of the disk "DEINE HD"
    	set freigeteilt to frei div 1000000
    	set diff to freigeteilt / geteiltMB
    	set diff to diff div 1
    	set HDVoll to "HD ist in ca " & diff & " Tagen voll! 
    Es kamen in der letzten Woche " & geteiltGB & "GB Daten hinzu"
    
    
    Man möge mir eventuelle schlimme Dinge im Code verzeihene, hab erst for einer Woche mit AS angefangen ;)
     
    #9 Samsas Traum, 25.03.10
    Zuletzt bearbeitet: 25.03.10
  10. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Danke, daß Du Deinen Code hier zur Verfügung gestellt hast.
    Oh mein Gott… seid ihr alle in einer Welt aufgewachsen in der Resourcen wie RAM, CPU und HD endlos sind? Das sieht alles so von hinten durch die Brust ins Auge aus…

    Abgesehen davon, daß Du mit inkorrekten Annahmen eine ziemlich wertlose Hausnummer berechnest wäre der Einsatz von ein wenig mehr Shellcode doch enorm Effizienz steigernd.

    Nicht jede gänderte Datei ist mit neu hinzugekommender Datenmenge gleichzusetzen. Wenn ich ein 10GB großes Moviefile nehme und ein MPEG 4 Tag ändere, berechnest Du 10GB neue Daten was natürlich nicht korrekt ist. Die Datei ist unter Umständen sogar um einige Bytes (oder im Falle von Cover Art sogar MB) kleiner geworden.

    Danach ändert Dein Skript das Änderungsdatum aller Dateien die es mitberechnet. Dafür gibt es überhaupt keinen Grund und das sollte man auch auf keinen Fall tun wenn man die Datei nicht wirklich verändert hat (in welchem Fall man das auch nicht tun muß, weil es automatisch passiert). Du entwertest damit die Aussagekraft des Änderungsdatum auf 0.

    Variablennamen wie i, blubb und so weiter sind extrem aussagelos, abgesehen davon, daß Du deutschsprachige Variablennamen nicht nur überhaupt verwendest, sondern auch noch mit englischen mischst. Wer soll diesen Code jemals ansehen können? Schonmal Ein Skript mit portugiesischen oder griechischen Variablennamen gesehen? Absolut unlesbar. Bitte ordentliche, aussagekräftige Variablennamen verwenden! Und die bitte nur in englisch benennen.


    Genaugenommen müßte man nur mit [tt]df[/tt] die Belegung der Platte einmal pro Tag in ein File sichern. Die Belegung von heute vergleicht man mit der vor [tt]n[/tt] Tagen. Daraus kann man die tatsächliche Änderung der Belegung ablesen. Man könnte sogar aus der 1. Ableitung dieses Graphen den aktuellen Trend ausmachen.

    Danke
    Gruß Pepi
     
  11. Samsas Traum

    Samsas Traum Pommerscher Krummstiel

    Dabei seit:
    24.04.08
    Beiträge:
    3.030
    Ich gebe dir vollkommen recht, allerdings muss ich dazu 3 Dinge sagen:
    1. Wie ich schon erwähnt habe bin ich erst seit einer Woche dabei
    2. Werde ich die Variablen usw. noch ändern, das war nur auf die schnelle
    3. Muss ich dazu sagen das all meine Dateien, die ich berechne, sich niemals ändern, von daher auch nicht das Änderungsdatum.

    Achso, und bisher hat das Skript nicht nach jedem Ablauf jedes Änderungsdatum geändert.
    Naja, ich hoffe du bist noch ein bisschen Umsichtig mit mir als Anfänger, habe auch vor mich zu bessern. Ich bin momentan eher dabei Funktionen zu verinnerlichen als auf "Schönheit" zu achteten, das kommt wenn das ganze leichter von der Hand geht ;)
     
  12. Duck Dodgers

    Duck Dodgers Reinette de Champagne

    Dabei seit:
    06.12.09
    Beiträge:
    419
    Ich mus pepi leider recht geben: Dein Script ermittelt "nur" die Menge der Änderungen und wann die HD voll sein könnte! Das sollte über ein shell script schneller klappen und ich würde dies auch vorziehen. Aber als Anfänger kann man dir da keinen großen Vorwurf machen. Wenn du hilfe brauchst stehen wir dir zur Verfügung.
     

Diese Seite empfehlen