2 votos

Pregunta sobre Applescript para copiar archivos

He escrito un script para copiar archivos de una tarjeta SD a un disco duro Thunderbolt.

Quería que la acción hiciera todo esto de forma automática en un único applescript bajo una acción de automator.

Cuando ejecuto este applescript, parece funcionar, pero ahora los usuarios me informan de que obtienen errores al copiar archivos grandes (5-8GB).

Aquí está el script que he escrito. No sé por qué se cuelga. ¿Tal vez un error de tiempo de espera?

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

1voto

Malik hassan Puntos 16

He probado a copiar archivos y carpetas por valor de 8,95 GB y sí que se produce un tiempo de espera.

Lo mejor que puedes intentar es añadir una cláusula de tiempo de espera al código. Cuando hice esto funcionó bien. Le di al script 30 minutos.

No tengo tarjetas SD, así que en mis pruebas tuve que cambiar el código para adaptarlo a mi configuración.

Me doy cuenta de que..:

  • tienes dos bloques de tell para finder donde solo necesitas uno.

  • ya que no estás usando el manejador on run y la entrada return no lo necesitas en el código.

  • Su código de creación de carpetas no comprueba los nombres existentes. Esto también significa que habrá un error si el usuario utiliza un nombre existente.

  • Dado que no pueden crear carpetas de destino con el mismo nombre, nunca habrá un archivo/carpeta existente en él con el mismo nombre. Así que no hay ninguna razón real para comprobar si un elemento ya existe. Y diciendo esto, debería ser capaz de eliminar el bloque de repetición y la comprobación de existencia y sólo utilizar ( con código de tiempo de espera):

.

 with timeout of 1800 seconds --30mins

              duplicate items of the_files to target_folder

 end timeout

Esto también dará lugar a una sola acción de copia en el buscador en lugar de posiblemente 10s-1000s de los individuales.

Para su respuesta por defecto de fecha puede utilizar:

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

....

Esto le dará un diálogo con fecha actual como este.

enter image description here

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X