Ordner überwachen und Kopieren

R

remierk

Neues Mitglied
Thread Starter
Dabei seit
16.11.2007
Beiträge
6
Reaktionspunkte
0
Ich habe folgendes Problem: In einen Ordner gehen via Wlan über ein FTP Protokoll von einem Anderen Rechner neue Dateien ein.

Wenn ich auf die Dateien (z.B. Fotos) zugreife, während sie noch gesendet werden, bekomme ich auch unvollständige/ unfertige Dateien.

Ich suche daher ein Script oder eine Automatoraktion, die den Eingangsordner überwacht und neue Dateien sofort in einen anderen Ordner kopiert.

Kann mir jemand helfen. Ich bekomme das mit Automator nicht "gebacken".
 
...

Hallo remierk,

das wird in dem Fall nicht viel nützen. Die Ordneraktion reagiert auf hinzugefügte Objekte. Eine halbe Datei wird durch Kopieren in einen anderen Ordner auch nicht ganz.

Man könnte z.B mit
do shell script "du -k" & pfadzurdatei
in einer Schleife ständig die Dateigröße abfragen und wenn die gleich hoch bleibt kann man davon ausgehen, dass sie ganz übertragen wurde und dann kopieren.

Wieviel hast Du schon von Deiner Ordneraktion fertig und soll die nur kopieren?

Gruß Andi
 
Hallo Andy,

vielen Dank für den Hinweis. Ich habe mich falsch ausgedrückt. Die Datei kommt schon vollständig. Weil sie aber per FTP kommt, wartet in meinem Fall die Diashow scheinbar nicht auf die vollständige Übertragung sondern zeigt einen Teil des Bildes als Fläche grau. Beim nächsten Zugriff ist die Datei dann vollständig und wird angezeigt.

Ich glaube der im Finder würden nur vollständige Dateien (Fotos) weiterkopiert und dann auch angezeigt.

Ich bin im Forum auf Deine Hilfe von Januar 2004 an Player1 gestoßen und habe probiert die Ordneraktion "Hinzufügen - Neue Objekte Warnung" so zu modifizieren, dass Automator gestartet wird und die Kopieraktion durchgeführt wird. So wie Du das damals für eine PS Aktion vorgeschlagen hast:

tell application "automator"
do script "kopiere Datei" (mein Aktionsname)
end tell

Leider hatte ich kein Glück und es kam immer die Warnmeldung: "Erwartet wurde ein Zeilenende - es wurde aber "Script" gefunden" oder so ähnlich.

Was hab ich falsch gemacht ?

Gruß remierk
 
...

Hallo remierk,

so geht das nicht. Der Befehl "do script" ist dafür um in Photoshop eine vorgefertigte PS-Aktion aufzurufen. Den Befehl kennt der Automator gar nicht.
Skriptfähige Programme haben unterschiedliche Befehle - jetzt mal grob gesagt. Einige Befehle werden auch von allen Programmen verstanden.

Das Problem löst sich auch nicht durch Kopieren oder Verschieben. Dem Finder ist das egal ob die Datei vollständig ist. Der wartet auch nicht extra bis die Datei da ist.

Das Problem am Hot-Folder also der Ordneraktion ist aber dass sie auf alle Objekte reagiert. Das kann eine "halbe" Datei sein oder auch z.B. ein mp3 welches dann Deine Diashow auslösen würde obwohl es gar kein Bild ist.

Die Ordneraktion schaut im Groben so aus:

Code:
on adding folder items to this_folder after receiving these_items
	 mach was
end adding folder items to

Das "mach was" wird ausgeführt sobald ein oder mehrere Objekte hineingelegt werden. In Deinem FTP-Fall ist das schon mal eine unvollständig übertragene Datei.

Beispiel:
Code:
on adding folder items to this_folder after receiving these_items
	display dialog "Übertragung start" giving up after 1 -- dieser Dialog kommt bei der unfertigen Datei
	set folder_size1 to 0
	set folder_size2 to 1
	repeat while folder_size1 ≠ folder_size2
		set folder_size1 to first item of (do shell script "du -kc " & quoted form of (POSIX path of this_folder))
		delay 3
		set folder_size2 to first item of (do shell script "du -kc " & quoted form of (POSIX path of this_folder))
	end repeat
	display dialog "fertig" giving up after 1 -- dieser Dialog kommt bei der ganzen Datei
end adding folder items to

Bei dieser Aktion wird die Ordnergröße in kb alle drei Sekunden (bei langsamer Verbindung eventuell erhöhen) überprüft und wenn sie sich nicht mehr verändert, wird die Aktion "fertig" gezeigt. Sobald aber ein Objekt drin ist wird auch die Aktion "Übertragung start" gezeigt. Das gilt auch bei mehreren Objekten die 2te Aktion wird nur gestartet wenn alles da ist.

Gruß Andi
 
Hallo Andi,

vielen, vielen Dank für Dein Script, dass einwandfrei läuft.
Ich bin erst heute wieder am Rechner.

Als völliger Laie möchte ich nun, dass anstelle des

"display dialog "fertig" giving up after 1"

das vollständige Item z.B. in den Folder "/xxx" kopiert wird.
Wie würde das Script hierfür aussehen?

PS: Machst Du das hauptberuflich? Ist ja unglaublich, wie vielen Du schon geholfen hast. Danke für Deine Mühe.

Gruß
remierk
 
...

Hallo remierk,

z.B. so:

Code:
set dest_folder to "/Users/<DeinName>/Pictures/<NameOrdner>"
	
	repeat with i from 1 to number of items in these_items
		set this_item to item i of these_items as alias
		
		tell application "Finder"
			duplicate this_item to POSIX file dest_folder
		end tell
		
	end repeat

kopiert alles was gerade ankam (auch Ordner) nach dest_folder wobei der Pfad bei /Users/ beginnt. Durch POSIX file wird das mit dem Namen der Festplatte ergänzt und in AppleScript Pfade umgesetzt. z.B "Macintosh HD:Users:..."
Willst Du die Dateien verschieben ersetze duplicate durch move.

Machst Du das hauptberuflich?
Nein.

Gruß Andi
 
Hallo Andi,

vielen Dank !
Es funktioniert fehlerlos! Du hast mir sehr geholfen.
Du kannst die "Schulterklopfmaschine" im Dauerbetrieb einschalten !!!!!!!!

Beim ganzen Hin und Her des Testens ist mir ein zusätzlicher Gedanke gekommen. Ich hoffe ich werde nicht unverschämt.

Könnte das Script zwischen Hoch und Querformatigen JPG Fotos unterscheiden und diese jeweils in unterschiedliche Ordner kopieren/bewegen? Wie würde das Script aussehen?

Freundliche Grüße
remierk
 
...

Hallo remierk,

versuch es mal so:

Code:
set landscape_folder to "/Users/<DeinName>/Pictures/Bilder quer"
	set portrait_folder to "/Users/<DeinName/Pictures/Bilder hoch"
	
	repeat with i from 1 to number of items in these_items
		set this_item to item i of these_items as alias
		set mdls_item to quoted form of (POSIX path of this_item)
		set PixelWidth to last word of (do shell script "mdls -name kMDItemPixelWidth " & mdls_item)
		set PixelHeight to last word of (do shell script "mdls -name kMDItemPixelHeight " & mdls_item)
		
		if PixelWidth > PixelHeight then
			set dest_folder to landscape_folder
		else
			set dest_folder to portrait_folder
		end if
		
		tell application "Finder"
			duplicate this_item to POSIX file dest_folder
		end tell
		
	end repeat
Es funktioniert fehlerlos!
naja - da fehlt noch viel um das zu sagen. Es sind noch gar keine Routinen für die Fehlerbearbeitung eingebaut.
Beachte: Bei einem Ordner oder "Nichtbild" schlägt die mdls Abfrage fehl und es wird vermutlich gar nichts oder nur teilweise kopiert. Quadratische Bilder landen automatisch in hochformat. Ich habe jetzt mal die mdls Abfrage gewählt weil mir das schneller erscheint als über Image Events weil da das Bild nicht geöffnet wird. Ich weiß aber nicht genau ob die Daten sofort nach einem FTP Upload verfügbar sind - deshalb "Versuch"

Ich hoffe ich werde nicht unverschämt.
- geht grad noch :p

Wenn Du Deine Aktion fertig hast, kannst Du sie ja nochmal hier einstellen. Eventuell kann man sie dann noch verbessern oder eben die Fehler abfangen.

Gruß Andi
 
Zuletzt bearbeitet:
Danke

Hallo Andi,

ich habe die beiden "original" Scripte von Dir verbunden und es läuft super. Da in den Ordner grundsätzlich nur JPGs kommen dürfte es keine Probleme geben.

Nochmals vielen Dank.

Kann man eigentlich innerhalb eines html Editors (z.B. Dreamweaver) auch mit Scripten arbeiten?

Konkret: Ließe sich auf jeder exakt gleichen Detailansichtsseite einer in Aperture automatisch erstellten Webgalerie einen "Bestell/Funktionstaste" einbauen? Wenn ja, würdest Du so etwas grundsätzlich machen und zu welchen Konditionen?

freundliche Grüße
remierk
 
...

Hallo remierk,

...würdest Du...

sicher - schreib mir eine e-Mail über das Forensystem und ich mach Dir ein Angebot.

Gruß Andi
 
hallo

darf ich hier gleich mal ansetzen?

habe ein volume SCAN mit einem Ordner ARCHIV. Wenn jemand etwas in den Ordner ARCHIV legt, soll dieses Dokument aufs Volume EXPORT_MWST in den Ordner SAMMELORDNER gelegt werden.

Ich schaffs beim besten Willen nicht...
 
*hochschieb*
 
Zurück
Oben Unten