Dateien vom Server in lokalen Ordner kopieren? - (Sync)

Ist in der Textdatei eine Leerzeile zwischen den Dateipfaden?

Wegen dem 2. Problem, versuch mal über und / oder unter dem set URLList ein delay 1 einzufügen, es könnte sein, dass Safari die Seite noch nicht geladen hat, wenn er sie lesen möchte.
 
Hab das delay 1 jetzt mal an beiden Stellen eingefügt und werde das weiterhin testen.

In der Textdatei sind keine Leerzeilen, hier die (gezippte) Originaldatei zur Ansicht:
 
Konnte das Problem mit den Bildern reproduzieren und hab das jetzt umgangen, einfach das repeat mit folgendem austauschen, dann sollts funktionieren:

Code:
repeat with i in URLList
		set AppleScript's text item delimiters to {"/", "."}
		set newName to ">" & text item -2 of i & ".jpg"
		set AppleScript's text item delimiters to ""
		set cd to "cd " & quoted form of destPath & "; curl " & i & newName
		do shell script cd
	end repeat
 
... also zu erst mal die gute Nachricht: Die Dateinamen stimmen jetzt!

Allerdings sind das leere Dateien (0KB, keine Vorschau etc.). Die Dateiendung ist jetzt auch fest im Script, ich habe jetzt aber dummerweise nur für den Test 3 Bilder ausgesucht, im wirklichen Einsatz sind das gemischte Dateien (.jpg, .swf, .dat, .xml), es währe also gut wenn man die feste Dateiendung wieder aus dem Script nehmen könnte.

Achja, das delay 1 hat jetzt scheinbar das Problem gelöst das manchmal gar nicht heruntergeladen wird - bisher wurde immer heruntergeladen!
 
ok, nächster Versuch:

Code:
repeat with i in URLList
		set AppleScript's text item delimiters to {"/", "."}
		set newName to ">" & text item -2 of i & "." & last text item of i
		set AppleScript's text item delimiters to ""
		set cd to "cd " & quoted form of destPath & "; curl " & i & newName
		do shell script cd
		delay 1
	end repeat
 
hm, also die Endung ist scheinbar wieder frei, das ist super. Aber ich bekomm leider noch immer leere 0KB Dateien :(
 
Ja hab grad gemerkt, das war Schwachsinn. Nochmal das Ganze:

Code:
set destPath to "/Users/Name/Desktop/Test/"
tell application "Safari"
	open location "/U/R/L/loadthis.txt"
	set Liste to text of document of window 1
	set AppleScript's text item delimiters to "
"
	set URLList to every text item of Liste
	set AppleScript's text item delimiters to ""
	close window 1
	repeat with i in URLList
		set AppleScript's text item delimiters to {"/", "."}
		set newName to ">" & text item -2 of i & "." & last text item of i
		set AppleScript's text item delimiters to ""
		set cd to "cd " & quoted form of destPath & "; curl " & i & newName
		do shell script cd
	end repeat
end tell

Das Problem war die URLList, die hat immer die Leerzeile eingefügt, ist jetzt behoben.
 
Jetzt funktioniert das Script, macht alles was es soll!

Komischerweise erhalte ich aber trotzdem den Fehler "error "„Safari“ hat einen Fehler erhalten: sh: .: Is a directory" number 1"

Hab gedacht das könnte an dem alleine gelassenen Anführungszeichen liegen und habs in die vorherige Zeile mit rein genommen, aber dann gehts gar nicht mehr, das hat also wohl seinen Grund :)
 
Schau mal obs so noch geht:

Code:
set destPath to "/Users/Name/Desktop/Test/"
tell application "Safari"
try
	open location "/U/R/L/loadthis.txt"
	set Liste to text of document of window 1
	set AppleScript's text item delimiters to "
"
	set URLList to every text item of Liste
	set AppleScript's text item delimiters to ""
	close window 1
	repeat with i in URLList
		set AppleScript's text item delimiters to {"/", "."}
		set newName to ">" & text item -2 of i & "." & last text item of i
		set AppleScript's text item delimiters to ""
		set cd to "cd " & quoted form of destPath & "; curl " & i & newName
		do shell script cd
	end repeat
end try
end tell
 
Danke!! - jetzt kommt auch keine Fehlermeldung mehr!
 
Hätte da noch eine kleine Frage zu Applescript ...

Ist es wirklich nicht möglich relative Pfade zu verwenden? Hab schon etwas gesucht, aber finde dazu irgendwie nichts.

Ich müsste einen Pfad mit "/" (den "destPath" hier vom script) und einen mit ":" Trennzeichen (Pfadangabe für Finder Dateilöschbefehl) als relativen Pfad ausgeben.

Also das ich vom Script ausgehe, eine Ordnerebene höher und dann in den Ordner test? Also so was wie: "../test" und "..:test"
Bloß geht das ja leider scheinbar nicht.

Währe es alternativ möglich einfach den Festplattennamen (meist Macintosh HD) zu bekommen, so das ich den in meinen Pfad einbauen kann? Ich würde dann einfach alles Wesentliche direkt in einem Projektordner auf der HD Hauptebene ablegen.
 
Falls ich dich richtig verstanden habe, dann geht das:

Code:
set AppleScript's text item delimiters to ":"
set newPath to items 1 thru -2 of every text item of (path to me as string) & "Test" as string
set AppleScript's text item delimiters to ""
get (path to me as string) & "
" & newPath

Das Skript geht in den Ordner, in dem das Skript liegt und dann in den Ordner Test, der im gleichen Ordner wie das Skript liegt. Möchtest du noch eine Ebene tiefer gehen, dann mach aus dem -2 eine -3. Möchtest du einen Ordner weiter gehen dann musst du hinter dem "Test" noch ein & "nächsterOrdner" hinhängen und so weiter.

Die 2. Methode von der Festplatte auszugehen geht natürlich auch. Die Festplatte fungiert hier als ganz normaler Ordner mit dem Namen "Macintosh HD".
 
Danke funktioniert 1a!

Gibts auch eine Möglichkeit, den Pfad mit den "/" Strichen auszugeben? Weil so braucht man es ja für den destPath vom Script.
(Warum will Applescript den Pfad eigentlich manchmal so, manchmal so!?)
 
Noch eine Kleinigkeit ... :D

Wenn in der Liste die URL zu einer nicht auf dem Server existierenden Datei ist (also ein fehlerhafter Listeneintrag), dann wird komischerweise trotzdem was mit dem Dateinamen heruntergeladen, allerdings kann man das nicht öffnen. Ich vermute das ist irgendwie der Inhalt der "404 Datei nicht gefunden" Seite, verpackt mit dem Dateinamen der fehlenden Datei.

Kann man das vielleicht irgendwie abfangen, also das eine nicht vorhandene Datei übersprungen wird und nicht trotzdem was mit dem Dateinahmen im lokalen Ordner landet?
 
Vorausgesetzt, es kommt tatsächlich eine Error 404 Seite, dann sollte es z.B. so gehen:

Code:
set destPath to "/Users/Name/Desktop/Test/"
tell application "Safari"
try
	open location "/U/R/L/loadthis.txt"
	set Liste to text of document of window 1
	set AppleScript's text item delimiters to "
"
	set URLList to every text item of Liste
	set AppleScript's text item delimiters to ""
	close window 1
	repeat with i in URLList
			if (my myCheck(i)) = 0 then
				set AppleScript's text item delimiters to {"/", "."}
				set newName to ">" & text item -2 of i & "." & last text item of i
				set AppleScript's text item delimiters to ""
				set cd to "cd " & quoted form of destPath & "; curl " & i & newName
				do shell script cd
			end if
		end repeat
	end repeat
end try
end tell

on myCheck(i)
	set checkURL to "curl --silent '" & i & "' | grep -c 'Error 404'"
	try
		set num to do shell script checkURL
	on error
		set num to 0
	end try
end myCheck
 
Zuletzt bearbeitet:
Hm, also wenn ich das wieder mit der Testdatei teste und bei den drei Bildern vor das ".jpg" z.B. ein "x" setze, so das ich einen nicht vorhandenen Dateinamen generiere, so wird bei mir trotzdem noch irgend etwas mit diesen falschen Dateinamen heruntergeladen.
 
Dann kommt wahrscheinlich keine error 404 seite. Kannst du mal den Quelltext einer Seite posten, bei der der Link nicht geht?
 
Noch zur Erläuterung: Die Subroutine myCheck ruft den Link auf und sucht im Quelltext nach dem Strin "Error 404". Ist der String nicht enthalten, dann gehts weiter, ansonsten wird die nächste URL geprüft. Dazu muss aber "Error 404" auch vorkommen. In der Regel wird eine solche Fehlermeldung auch ausgegeben (wie z.B. bei http://www.google.com/fantasietext.jpg). Kann aber sein, dass die bei dir anders aussieht.
 
Zurück
Oben Unten