1 votos

Mover archivos desde el Escritorio a otra carpeta, y viceversa usando AppleScript (y bash dentro de Applescript) dentro de Automator

Necesito mover archivos desde mi escritorio a una carpeta ~/Documents/Desktop migration y he tratado de código de un script que hará. Por desgracia, (y la razón por la que estoy pidiendo aquí) no funciona.

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

Lo que no funciona es sólo transfiere los archivos en el escritorio desde el Escritorio de la Migración de la carpeta y no la espalda, desde el escritorio hasta el Escritorio de la Migración de la carpeta, así que ¿cómo puedo lograr esto?

Lo que he encontrado hasta ahora: enter image description here

on run {input, parameters}
    set theQuery to input
    if theQuery = 1 then
        do shell script "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!

1voto

user3439894 Puntos 5883

Así que parece que er tratando de establecer un indicador que cambia de estado cada vez que el Servicio se ejecuta, y no hay más que una manera de lograr esto.

En este ejemplo, he creado un Automator Servicio denominado Servicio de Prueba, con la configuración que se muestra en la imagen de abajo, y se añadió Ejecutar el Shell Script de acción, ya que esto es todo lo que usted necesita para realizar la tarea ya que se utiliza un do shell script AppleScript comando de todos modos para hacer el trabajo.

Automator Service

Como está codificado, cada vez que el Servicio se ejecuta de que dice lo de la bandera , 0 o 1, y establece a la opuesta. A usted le de curso quitar el say... comandos de sustitución de ellos con el código que queremos ejecutar en función de la configuración de la bandera.

#!/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

Este utiliza xattr para establecer un atributo extendido en el Automator del Servicio .workflow archivo y es esto lo que se lee cada vez y cambia cada vez que el Servicio se ejecuta y esta es la bandera para determinar qué rama de la if instrucción se ejecuta en la secuencia de comandos.

Puede establecer manualmente el com.TestService.flag uso de xattr en la Terminal antes de ejecutar el guardado de Automator del Servicio a fin de tener el atributo extendido aplicado a es .workflow archivo o si usted acaba de ejecutar la guarda de Automator del Servicio la primera vez que se fijará 1 como se lee el vacío flag variable la primera vez como un ser igual a 0.

La siguiente salida de la Terminal muestra los atributos extendidos de la Automator del Servicio .workflow archivo cuando fue salvo, sólo tenía la com.apple.FinderInfo de atributo y, a continuación, el Servicio se ejecute un par de veces para mostrar que el com.TestService.flag atributo fue establecer y cambiar cada vez que el Servicio se ejecute. (Yo manualmente corrió la xattr de comandos antes y después en-entre cada vez que me encontré con el Servicio de tener esta salida para mostrar.)


$ 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, usted puede cambiar el nombre de la bandera de com.TestService.flag a lo que quieras sin embargo recuerda que el cambio en la secuencia de comandos en los tres lugares, en el awk comando y en cada xattr comando en cada rama de la if declaración. También cambiar el nombre de la file variable según sea apropiado para el real nombre de su Automator Servicio .workflow archivo.

-1voto

giorgio Puntos 1

Pruebe con un comando de Terminal, es muy simple·

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

Eso es todo !.

El original de la carpeta (archivos) permanece intacto en su posición.

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