Ich habe ein Skript geschrieben, um Dateien von einer SD-Karte auf eine Thunderbolt-Festplatte zu kopieren.
Ich wollte, dass die Aktion all dies automatisch in einem einzigen Shell-Applescript unter einer Automator-Aktion erledigt.
Wenn ich dieses Applescript ausführe, scheint es zu funktionieren, aber jetzt melden mir Benutzer, dass sie beim Kopieren großer Dateien (5-8 GB) Fehler bekommen.
Hier ist das Skript, das ich geschrieben habe. Ich weiß nicht, warum es abstürzt. Vielleicht ein Timeout-Fehler?
on run {input, parameters}
tell application "Finder"
set FolderName to text returned of (display dialog "Please enter Today's Date: mmddyyyy-(alphaVariable if more than one card today)" default answer "e.g.03161980-A")
set loc to disk "WorldRace Storyteller"
set newfoldername to FolderName
set newfo to make new folder at loc with properties {name:newfoldername}
set loc2 to newfo
end tell
tell application "Finder"
set the_files to disk "BMPCC"
set target_folder to loc2
repeat with this_file in the_files
if (not (exists file (this_file's name) of target_folder)) then
duplicate this_file to target_folder
end if
end repeat
end tell
return input
end run
Ich habe das Kopieren von Dateien und Ordnern im Wert von 8,95 GB getestet, und Sie erhalten eine Zeitüberschreitung.
Das Beste, was Sie versuchen können, ist, dem Code eine Timeout-Klausel hinzuzufügen. Als ich das tat, funktionierte es ok. Ich habe dem Drehbuch 30 Minuten gegeben.
Ich habe keine SD-Karten, also musste ich bei meinen Tests den Code etwas ändern, um meinem Setup gerecht zu werden.
Ich merke:
Sie haben zwei Tell-Blöcke für den Finder, wo Sie nur den einen brauchen.
Da Sie den On-Run-Handler und die Return-Eingabe nicht verwenden, benötigen Sie sie nicht im Code.
Ihr Ordnererstellungscode hat keine Prüfung auf vorhandene Namen. Dies bedeutet auch, dass ein Fehler auftritt, wenn der Benutzer einen vorhandenen Namen verwendet.
Da sie keine Zielordner mit demselben Namen erstellen können, wird es niemals eine Datei/einen Ordner mit demselben Namen darin geben. Es gibt also keinen wirklichen Grund zu prüfen, ob ein Artikel bereits existiert. Und wenn Sie das sagen, sollten Sie in der Lage sein, den Wiederholungsblock und die Existenzprüfung zu entfernen und einfach (mit Timeout-Code) zu verwenden:
.
with timeout of 1800 seconds --30mins
duplicate items of the_files to target_folder
end timeout
Dies führt auch zu einer einzigen Kopieraktion im Finder und nicht zu möglicherweise 10-1000 einzelnen Kopien.
Für Ihre Datumsstandardantwort können Sie Folgendes verwenden:
set theDate to do shell script "date +%d%m%Y-"
tell application "Finder"
set FolderName to (text returned of (display dialog "Please enter Today's Date: mmddyyyy-(alphaVariable if more than one card today." & return & "e.g. " & (theDate & "B") default answer (theDate & "A")))
....
Dadurch erhalten Sie einen aktuellen Dialog wie diesen.
Markhunte
TWR
TWR
Markhunte