Percorso relativo in Automator

2

Voglio fare un'azione di Automator che copia un insieme di file da una cartella a un'altra cartella che è una cartella in alto e quindi due cartelle in basso rispetto ai file originali. In altre parole: ../Folder1/Folder2. L'azione di Automator si troverà nella stessa cartella dei file, ma la cartella di root verrà duplicata e rinominata su più computer, quindi il percorso DEVE essere relativo.

La mia comprensione è che ho bisogno di eseguire un oggetto Applescript per prendere il percorso corrente e poi fare ... qualcosa. Ho zero esperienze di scripting. Qualcuno può aiutarti?

    
posta Ben Dansby 10.09.2013 - 21:19
fonte

2 risposte

1

Invece di AppleScript, puoi farlo aggiungendo un modulo Esegui script shell con questo contenuto:

for F in "$@"; do
    cp "$F" "${F%/*/*}/Folder1/Folder2/${F##*/}"
done 

Modifica i nomi di Folder1 / Folder2 in modo che corrispondano al tuo caso reale.

Scegli Come argomenti da Pass Input: pop-up a destra dove dice to stdin .

$@ memorizza il percorso completo di tutti i file selezionati. $F è il percorso di ogni singolo file mentre viene elaborato dal ciclo for . Lo strano ${F%/*/*} è il percorso completo del file meno il nome del file e il suo nome della cartella principale. Lo strano ${F##*/} è il nome del file stesso.

Prima prova per sicurezza!

L'altro modo per farlo, che a mio avviso sarebbe più facile a lungo termine:

  1. Apri una finestra di terminale.
  2. Digita cd spazio e trascina la cartella contenente i tuoi file nella finestra. (Questo verrà incollato nel percorso di quella cartella. Assicurati di includere lo spazio dopo cd prima di trascinare e rilasciare.)
  3. Digita cp *Video* ../Folder1/Folder2
  4. Fatto!
risposta data 10.09.2013 - 23:02
fonte
0

UPDATE * ha ridotto il codice un po 'e corretto il percorso

Da quando hai chiesto il applescript ...

on run {input, parameters}
    tell application "Finder"
        set thefolderPath to "folder1:folder2:"
        set mycontainer to (path to me)
            set movePath to folder thefolderPath of container of (path to me)'s container as alias
        duplicate input to movePath

    end tell

end run

Questo elimina anche l'azione di copia poiché anche qui la duplicazione viene eseguita.

UPDATE 2

Con questa versione. Non importa dove sia l'App. Il percorso è elaborato da dove sono i file.

on run {input, parameters}
    set thefolderPath to "folder1:folder2:"
    tell application "Finder"
        set thisItem to item 1 of input as alias
         set movePath to folder thefolderPath of container of (thisItem)'s container as alias
        duplicate input to movePath

    end tell

end run

AGGIORNAMENTO 3

Questa versione è la stessa dell'aggiornamento 2. Ma testerà per la tua cartella1 e cartella2.

Se una delle due cartelle non esiste, le renderà e trasferirà loro i file. Se solo la cartella2 non esiste. Quindi creerà solo quella cartella all'interno della cartella1. Significa che gli elementi esistenti nella cartella 1 sono sicuri.

on run {input, parameters}
    set thefolderPath to "folder1/folder2/"
    tell application "Finder"
        set thisItem to item 1 of input as alias
        set movePath to container of (thisItem)'s container as alias
        set theTestPath to ((POSIX path of movePath) & "/" & thefolderPath)

        if (do shell script "/bin/test -e " & quoted form of theTestPath & " ; echo $?") is "1" then
            -- 1 is false
            do shell script "/bin/mkdir -p " & quoted form of theTestPath

        end if
        set theActualPath to (POSIX file theTestPath) as alias
        duplicate input to theActualPath

    end tell

end run
    
risposta data 11.09.2013 - 00:07
fonte

Leggi altre domande sui tag