• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

AppleScript + Geektool Problem

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
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
 

Deleted member 99757

Gast
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.
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Was tut das Script 20 Minuten lang?
Gruß Pepi
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
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.
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Wärest Du bereit Deine Skripte zu sharen? Klingt nicht uninteressant.
Danke
Gruß Pepi
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
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 ;)
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Was haben die Zugangsdaten im Skript verloren? :)
Gruß Pepi
 

Deleted member 99757

Gast
Hört sich interessant an, wobei ich aber so langsam Platzprobleme auf meinem Desktop bekomme :)
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
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 ;)
 
Zuletzt bearbeitet:

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
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
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
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 ;)
 

Deleted member 99757

Gast
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.