Spostamento di file dal desktop in un'altra cartella e viceversa utilizzando AppleScript (e bash all'interno di Applescript) all'interno di Automator

1

Ho bisogno di spostare i file dal mio desktop in una cartella ~/Documents/Desktop migration e ho provato a codificare uno script che lo farà. Sfortunatamente, (e il motivo per cui lo sto chiedendo qui) non funziona.

Sto utilizzando un servizio (così posso accedere alla barra dei menu di qualsiasi applicazione > Servizi > (inserisci il nome del servizio qui)) e ho bisogno di memorizzare i dati variabili, quindi penso che l'automazione sia adatta per il lavoro, e sto usando AppleScript e Terminal per spostarmi.

Ciò che non funziona è che trasferisce solo i file sul desktop dalla cartella Desktop Migration e non dal desktop alla cartella Desktop Migration, quindi come posso ottenere questo ?

Quello che ho scoperto finora:

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

Grazie!

    
posta Brick 06.11.2016 - 11:10
fonte

2 risposte

1

Quindi sembra che tu stia cercando di impostare un flag che si attiva ogni volta che viene eseguito Service e c'è più di un modo per farlo.

In questo esempio, ho creato un Automator servizio denominato Test Service , con le impostazioni mostrate nel immagine qui sotto, e ha aggiunto un Esegui script di shell azione , poiché è tutto ciò di cui hai bisogno per eseguire l'attività dal momento che stavi utilizzando un do shell script AppleScript comando comunque per fare lavoro .

Comeattualmentecodificato,ognivoltacheilServiziovieneeseguitodicecheilflagèimpostatosu,0o1,eloimpostaalcontrario.Ovviamenterimuoveraiicomandisay...sostituendoliconilcodicechevuoieseguireinbaseall'impostazionedelflag.

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

Questo usa xattr per impostare un attributo esteso sul Automator Servizio .workflow file e è questo che viene letto ogni volta e modificato ogni volta che viene eseguito Servizio e questo è il flag per determinare quale ramo di if istruzione viene eseguita nello script .

Puoi impostare manualmente com.TestService.flag utilizzando xattr in Terminale prima di eseguire il servizio salvato Automator in modo che l'attributo esteso applicato sia .workflow file o se si esegue solo salvato Automator Servizio la prima volta è impostato su 1 mentre legge la% flag variabile la prima volta come uguale a 0 .

Il seguente output del Terminale mostra gli attributi estesi del Automator's Servizio .workflow file quando è stato salvato per la prima volta, aveva appena impostato com.apple.FinderInfo attributo , quindi il servizio è stato eseguito un paio di volte per mostrare che l'attributo com.TestService.flag è stato impostato e modificato ogni volta che è stato eseguito Servizio . (Ho eseguito manualmente il xattr comando prima e poi ogni volta che ho eseguito il Servizio per mostrare questo output .)

$ 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
$ 

Ovviamente puoi cambiare il nome del flag da com.TestService.flag a qualunque cosa desideri, ma ricorda di cambiarlo nello script in tutti e tre i luoghi, in il awk comando e in ogni xattr comando in ogni ramo della dichiarazione if . Modifica anche il nome della file variabile come appropriato per il nome effettivo del tuo Automator servizio .workflow file .

    
risposta data 06.11.2016 - 19:00
fonte
-1

Prova con un comando Terminale, è molto semplice ·

Digitare rsync -av, premere una volta la barra spaziatrice e trascinare la cartella nella finestra Terminale. Trascina la cartella di destinazione sulla finestra e premi Invio.

Questo è tutto!

La cartella originale (file) rimane intatta nella loro posizione.

    
risposta data 08.11.2016 - 09:46
fonte

Leggi altre domande sui tag