Domanda su Applescript per copiare i file

2

Ho scritto uno script per copiare file da una scheda SD in un disco rigido Thunderbolt.

Volevo che l'azione eseguisse automaticamente tutto questo in un singolo applescript con shell sotto un'azione di automa tore.

Quando eseguo questo applescript, sembra funzionare, ma ora gli utenti mi stanno segnalando di avere errori durante la copia di file di grandi dimensioni (5-8 GB).

Ecco lo script che ho scritto. Non so perché si sta schiantando. Forse un errore di timeout?

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
    
posta TWR 06.09.2014 - 14:10
fonte

1 risposta

1

Ho provato a copiare 8,95 GB di file e cartelle e si ottiene un timeout.

La cosa migliore che puoi provare è aggiungere una clausola di timeout al codice. Quando l'ho fatto ha funzionato bene. Ho dato la sceneggiatura a 30 minuti.

Non ho schede SD quindi nei miei test ho dovuto modificare il codice un po 'per sistemare il mio setup.

Noto:

  • hai due blocchi di tell per finder in cui hai solo bisogno di uno.

  • dal momento che non si sta utilizzando il gestore in esecuzione e l'input di ritorno non è necessario nel codice.

  • Il codice di creazione della cartella non ha alcun controllo sui nomi esistenti. Ciò significa anche che si verificherà un errore se l'utente utilizza un nome esistente.

  • Poiché non possono creare cartelle di destinazione con lo stesso nome, non ci sarà mai un file / cartella con lo stesso nome. Quindi non esiste un vero motivo per verificare se un articolo esiste già. E dicendo che dovresti essere in grado di rimuovere il blocco di ripetizione ed esiste il controllo e basta usare (con il codice di timeout):

.

 with timeout of 1800 seconds --30mins

              duplicate items of the_files to target_folder

 end timeout

Ciò comporterà anche una singola azione di copia nel Finder piuttosto che probabilmente 10s-1000 di singoli.

Per la tua risposta predefinita data puoi usare:

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")))

....

Questo ti darà un dialogo datato come questo.

    
risposta data 07.09.2014 - 12:02
fonte