Mover archivos de Desktop a otra carpeta y viceversa usando AppleScript (y bash dentro de Applescript) dentro de Automator

1

Necesito mover archivos desde mi escritorio a una carpeta ~/Documents/Desktop migration y he intentado codificar un script que lo hará. Desafortunadamente, (y la razón por la que pregunto aquí) no funciona.

Estoy usando un servicio (para que pueda ir a la barra de menú de cualquier aplicación > Servicios > (insertar el nombre del servicio aquí)) y necesito almacenar los datos variables, por lo que creo que automator es adecuado para el trabajo, y estoy usando AppleScript y Terminal para moverme.

Lo que no funciona es que solo transfiere archivos al escritorio desde la carpeta Migración de escritorio y no desde el escritorio a la carpeta Migración de escritorio, así que ¿cómo puedo lograr esto ?

Lo que he encontrado hasta ahora:

onrun{input,parameters}settheQuerytoinputiftheQuery=1thendoshellscript"mv ~/Desktop/* ~/Documents/Desktop\ migration"
        set output to 0
        return output
    else if theQuery = 0 then
        do shell script "mv ~/Documents/Desktop\ migration/* ~/Desktop"
        set output to 1
        return output
    end if
end run

¡Gracias!

    
pregunta Brick 06.11.2016 - 11:10

2 respuestas

1

Parece que estás intentando establecer una bandera que alterna cada vez que se ejecuta el Servicio , y hay más de una forma de lograrlo.

En este ejemplo, creé un Automator Servicio denominado Test Service , con la configuración que se muestra en la imagen a continuación, y se agregó una acción Ejecutar el script de shell , ya que esto es todo lo que necesita para realizar la tarea ya que estaba usando un do shell script AppleScript command de todos modos para hacer el trabajo .

Comoestácodificadoactualmente,cadavezqueseejecutaelServiciodicequelabanderaseestableceen0o1,ylaestableceenelopuesto.Porsupuesto,eliminaríaloscomandossay...reemplazándolosconelcódigoquedeseaejecutarsegúnlaconfiguracióndelabandera.

#!/bin/bash file="$HOME/Library/Services/Test Service.workflow" flag="$(xattr -l "$file" | awk '/com.TestService.flag/{print $2}')" if [[ $flag -eq 0 ]]; then # Do something... say "flag is currently set to 0, setting flag to 1" # Set flag to 1. xattr -w com.TestService.flag 1 "$file" else # Do something else... say "flag is currently set to 1, setting flag to 0" # Set flag to 0. xattr -w com.TestService.flag 0 "$file" fi

Esto usa xattr para establecer un atributo extendido en el Automator's Service .workflow file y esto es lo que se lee cada vez y se cambia cada vez que se ejecuta el Servicio y esta es la bandera para determinar qué rama de if sentencia se ejecuta en el script .

Puede configurar manualmente el com.TestService.flag usando xattr en Terminal antes de ejecutar el guardado Automator's Servicio para que se aplique el atributo extendido a .workflow file o si simplemente ejecuta el guardado Automator Service es la primera vez que lo configurará como 1 , ya que lee flag variable por primera vez como si fuera igual a 0 .

La siguiente salida de Terminal muestra los atributos extendidos del Automator's Servicio .workflow archivo cuando se guardó por primera vez, solo tenía el com.apple.FinderInfo atributo establecido, y luego el Servicio se ejecutó un par veces para mostrar que el atributo com.TestService.flag se configuró y cambió cada vez que se ejecutó el Servicio . (Ejecuté manualmente el comando xattr antes y luego entre cada vez que ejecuté el Servicio para mostrar este resultado .

$ xattr -l "$HOME/Library/Services/Test Service.workflow"
com.apple.FinderInfo:
00000000  00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000020
$ xattr -l "$HOME/Library/Services/Test Service.workflow"
com.apple.FinderInfo:
00000000  00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000020
com.TestService.flag: 1
$ xattr -l "$HOME/Library/Services/Test Service.workflow"
com.apple.FinderInfo:
00000000  00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000020
com.TestService.flag: 0
$ 

Obviamente, puedes cambiar el nombre de la bandera de com.TestService.flag a lo que quieras, pero recuerda cambiarlo en el script en los tres lugares, en el comando awk y en cada comando xattr en cada rama de la declaración if . También cambie el nombre de la variable file según corresponda para el nombre real de su Automator Servicio .workflow archivo .

    
respondido por el user3439894 06.11.2016 - 19:00
-1

Prueba con un comando de Terminal, es muy simple ·

Escriba rsync -av, presione una vez la barra espaciadora y arrastre la carpeta a la ventana de la Terminal. Arrastre la carpeta de destino a la ventana y presione Retorno.

Eso es todo!

La carpeta original (archivos) permanece intacta en su posición.

    
respondido por el giorgio 08.11.2016 - 09:46

Lea otras preguntas en las etiquetas