Schnelleres Löschen von Dateien per Applescript

nmueller1

Registriert
Thread Starter
Dabei seit
17.04.2011
Beiträge
4
Reaktionspunkte
0
Ich habe ein einfaches Applescript erstellt, das alle Dateien in einem bestimmten Ordner (>10000) auflisten und anschließend alle bis auf jede Hundertste Datei löschen soll, d. h. dass ich am Ende nur noch etwa 100 Dateien habe. Das Script funktioniert sogar, das Löschen der Dateien ist bloß unglaublich langsam. Es gibt doch bestimmt Möglichkeiten, die Geschwindigkeit zu optimieren, oder?

Code:
tell application "Finder"
	set meinPfad to "Macintosh HD:Users:Nils:Ordner" as alias
	set Liste to (every item of meinPfad)
	set Anzahl_Liste to count of items of Liste
	set Zaehler1 to 1
	set Zaehler2 to 1
	repeat while (Zaehler1 < Anzahl_Liste)
		set zu_loeschende_Datei to item Zaehler1 of Liste
		if Zaehler2 < 100 then
			delete zu_loeschende_Datei
			set Zaehler2 to Zaehler2 + 1
		else
			set Zaehler2 to 1
		end if
		set Zaehler1 to Zaehler1 + 1
	end repeat
end tell

Alle Hinweise nehme ich dankbar entgegen.

Nils
 
warum zählst du denn erstmal bis 100 hoch, wenn du ab 100 löschen willst?
du kannst das set zu_loeschende auch in die if zaehler2 anweisung mit packen, dann sparst du den aufruf, wenn du nicht löschst. so rufst du das x*99 unnötig auf....
 
Vielen Dank! Das ist doch schon einmal ein Anfang für die Optimierung ...

Nils
 
Bau eine dritte Variable ein, statt die Zähler einzelnd mit +1 zu inkrementieren.
Quasi

zaehler1 = zaehler1 + schrittweite

und entsprechend

if zaehler2 < schrittweite

So kannst du direkt auch noch den Step bestimmen, mit dem du die Dateien löschst.
 
Ich will ja aber 99% aller Dateien löschen, insofern kann die Schrittweite m. E. nur "1" sein. Dein Vorschlag hat mich allerdings auf die Idee gebracht, nicht zu löschen, sondern die restlichen 1% der Dateien in einen anderen Ordner zu bewegen (mit der Schrittweite "100"). Das sollte eigentlich wesentlich schneller gehen. Mal sehen ...
 
Alternativ kannst du auch meinen Vorschlag übernehmen, damit jede 100.te selektierte Datei in einen neuen gemeinsamen Ordner verschieben und danach den Rest mit einem Einzelbefehl gemeinsam löschen, dann sparst du dir die angesprochenen 10000de einzelnen Löschvorgänge.
 
Kein Problem. So, jetzt habe ich das Script überarbeitet. Nur jede 100ste Datei zu bewegen, geht wirklich wesentlich schneller, als den Rest zu löschen. Ich habe auch Deine Idee der "Schrittweite" aufgegriffen, die sich nun durch den Nutzer vorher festlegen lässt (ich weiss, dass sich auch der Pfad nutzerbasiert eingeben lässt, aber dafür bin ich momentan zu faul). Hier das fertige Script, das zumindest aus meiner Sicht jetzt arbeitsfähig ist:
Code:
with timeout of (300 * 60) seconds
	tell application "Finder"
		set Nutzerdialog to display dialog "Bitte gebe einen Wert für die Schrittweite ein" default answer "100"
		set Schrittweite to the text returned of Nutzerdialog as integer
		set meinPfad to "Macintosh HD:Users:User:Ordner1" as alias
		set meinPfad2 to "Macintosh HD:Users:User:Ordner2" as alias
		set Liste to (every item of meinPfad)
		set Anzahl_Liste to count of items of Liste
		set Zaehler to 1
		repeat while (Zaehler < Anzahl_Liste)
			set zu_bewegende_Datei to item Zaehler of Liste
			move zu_bewegende_Datei to meinPfad2
			set Zaehler to (Zaehler + Schrittweite)
		end repeat
	end tell
end timeout
Nochmals vielen Dank für euren Input!
 
Bitteschön. :)

Dein neues Script scheint wirklich eine Verbesserung zu sein. Freut mich wenn es funktioniert.
 
Zurück
Oben Unten