2 votos

¿Cómo puedo crear un apple script que cambie la carpeta de destino de los archivos lanzados desde el aire?

He descargado el siguiente apple script que mueve los archivos lanzados desde el aire a una carpeta específica (a la que me referiré como la carpeta Airdrop):

property AIRDROP_FOLDER : "Macintosh HD:Users:pschorn:Airdrop"
property QUARANTINE_KEY : "59"

property GET_QUARANTINE_COMMAND_START : "ls -l -@ '"
property GET_QUARANTINE_COMMAND_END : "' | tr '\\n' ' ' | sed 's/.*com\\.apple\\.quarantine\\s*\\(\\d*\\)/ \\1/' | awk '{$1=$1};1'"

on adding folder items to this_folder after receiving added_items
    repeat with i from 1 to length of added_items
        set current_item to item i of added_items
        set quarantine_type to getQuarantineType(POSIX path of current_item)
        if quarantine_type is equal to QUARANTINE_KEY then
            moveFile(current_item, alias AIRDROP_FOLDER)
        end if
    end repeat
end adding folder items to

on moveFile(move_file, destination_dir)
    tell application "Finder"
        move move_file to destination_dir with replacing
    end tell
end moveFile

on getQuarantineType(file_path)
    return do shell script GET_QUARANTINE_COMMAND_START & file_path & GET_QUARANTINE_COMMAND_END
end getQuarantineType

He seguido las instrucciones de este sitio web para configurarlo como una carpeta acciones script.

Sin embargo, si muevo un archivo airdropped fuera de mi carpeta airdrop recién creada y de nuevo a mi carpeta de descargas, se pone automáticamente de nuevo en la carpeta airdrop. No quiero que esto ocurra.

He encontrado que después de aplicar este comando de terminal xattr -d com.apple.quarantine [file path of airdropped file] el archivo ya no se moverá de nuevo a mi carpeta de lanzamiento desde el aire después de moverlo.

MI pregunta es: ¿Cómo puedo integrar este comando en el apple script anterior para que los archivos airdropped no se muevan automáticamente de nuevo a mi carpeta airdrop después de moverlos fuera de ella?

1voto

Michael Puntos 193

Si estás seguro de la procedencia de los archivos AirDropped y te parece bien eliminar el atributo extendido de cuarentena puedes eliminarlo como dices con xattr . En AppleScript puede hacerlo utilizando do shell script y pasando la ruta citada en forma de alias.

removeQuarantine(quoted form of (POSIX path of (current_item as alias)))

on removeQuarantine(file_path_alias)
    do shell script "xattr -d com.apple.quarantine " & file_path_alias
end removeQuarantine

En tu script quieres llamar a esto antes de el archivo se mueve por lo que su script se vería como a continuación (recuerde actualizar el AIRDROP_FOLDER a la ruta deseada).

El script comprobará ahora si los archivos contienen com.apple.quarantine igual a 59 y, si es así, elimine el atributo antes de mover el archivo.

Por lo tanto, si luego mueve el archivo de nuevo a ~/Descargas no se volverá a mover ya que el com.apple.quarantine ya no existe.


property AIRDROP_FOLDER : "macOS:Users:hali:Desktop:Test"
property QUARANTINE_KEY : "59"

property GET_QUARANTINE_COMMAND_START : "ls -l -@ '"
property GET_QUARANTINE_COMMAND_END : "' | tr '\\n' ' ' | sed 's/.*com\\.apple\\.quarantine\\s*\\(\\d*\\)/ \\1/' | awk '{$1=$1};1'"

on adding folder items to this_folder after receiving added_items
    repeat with i from 1 to length of added_items
        set current_item to item i of added_items
        set quarantine_type to getQuarantineType(POSIX path of current_item)
        if quarantine_type is equal to QUARANTINE_KEY then
            removeQuarantine(quoted form of (POSIX path of (current_item as alias)))
            moveFile(current_item, alias AIRDROP_FOLDER)
        end if
    end repeat
end adding folder items to

on moveFile(move_file, destination_dir)
    tell application "Finder"
        move move_file to destination_dir with replacing
    end tell
end moveFile

on getQuarantineType(file_path)
    return do shell script GET_QUARANTINE_COMMAND_START & file_path & GET_QUARANTINE_COMMAND_END
end getQuarantineType

on removeQuarantine(file_path_alias)
    do shell script "xattr -d com.apple.quarantine " & file_path_alias
end removeQuarantine

Nota : Este script sobrescribirá los archivos del mismo nombre en el destino sin preguntar. Si esto es una preocupación hay una versión bifurcada por el usuario SuraAzure en github que añade un número de secuencia al nombre del archivo antes de moverlo si ya existe un archivo con el mismo nombre en el directorio de destino.

0 votos

Eso funciona. Gracias.

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