Ruta relativa en Automator

2

Quiero realizar una acción de Automator que copie un conjunto de archivos de una carpeta a otra carpeta que está una carpeta arriba y luego dos carpetas hacia abajo desde los archivos originales. En otras palabras: ../Folder1/Folder2. La acción de Automator estaría en la misma carpeta que los archivos, pero la carpeta raíz se duplicará y cambiará de nombre en varios equipos, por lo que la ruta DEBE ser relativa.

Tengo entendido que necesito ejecutar un Applescript para capturar la ruta actual y luego hacer ... algo. Tengo cero experiencia en scripting. ¿Alguien puede ayudar?

    
pregunta Ben Dansby 10.09.2013 - 21:19

2 respuestas

1

En lugar de AppleScript, puede hacerlo agregando un módulo Ejecutar el script de shell con este contenido:

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

Edite los nombres de Folder1 / Folder2 para que coincidan con su caso real.

Elija Como argumentos en la Entrada del pase: ventana emergente a la derecha donde dice a stdin .

$@ almacena la ruta completa de todos los archivos seleccionados. $F es la ruta de cada archivo individual, ya que se procesa mediante el bucle for . Weird ${F%/*/*} es la ruta completa del archivo minus , el nombre del archivo y su nombre de la carpeta principal. El extraño ${F##*/} es el nombre del archivo en sí.

¡Prueba primero por seguridad!

La otra forma de hacerlo, que creo que sería más fácil a largo plazo:

  1. Abre una ventana de terminal.
  2. Escriba cd espacio y arrastre la carpeta que contiene sus archivos a la ventana. (Esto se pegará en la ruta a esa carpeta. Asegúrate de incluir el espacio después de cd antes de arrastrar y soltar).
  3. escribe cp *Video* ../Folder1/Folder2
  4. ¡Hecho!
respondido por el beroe 10.09.2013 - 23:02
0

ACTUALIZAR * recortó el código un poco y corrigió la ruta

Desde que pediste 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

Esto también elimina la acción de copia, ya que la duplicación también se realiza aquí.

ACTUALIZACIÓN 2

Con esta versión. No importa dónde está la aplicación. La ruta se determina según dónde están los archivos.

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

ACTUALIZACIÓN 3

Esta versión es la misma que la actualización 2. Pero probará tu carpeta1 y carpeta2.

Si alguna de las carpetas no existe, las creará y les moverá los archivos. Si solo folder2 no existe. Entonces solo hará esa carpeta dentro de la carpeta1. Lo que significa que los elementos existentes en la carpeta 1 son seguros.

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
    
respondido por el markhunte 11.09.2013 - 00:07

Lea otras preguntas en las etiquetas