Applescript-Frage zum Kopieren von Dateien

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
Es wäre hilfreich zu wissen, was die Fehler tatsächlich sagen??. Auch Welche Automator-Aktionen werden mit dem Skript verwendet?
Die Aussage, dass bei der Aktion "applescript ausführen" ein Fehler aufgetreten ist. Überprüfen Sie die Aktionseigenschaften und versuchen Sie erneut, den Workflow auszuführen."
Die einzigen Aktionen, für die ich Automator verwende, sind das Anzeigen von Bestätigungsdialogen. Es kann hilfreich sein zu wissen, dass es mit kleineren Dateien perfekt läuft!
einzelne große Datei oder Dateien als Ganzes = 5-8 GB

Antworten (1)

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.

Geben Sie hier die Bildbeschreibung ein