3 votos

Automatizador: Servicio para mover archivos a nuevas subcarpetas según la extensión del archivo *dentro de cualquier carpeta seleccionada*.

He estado buscando durante bastante tiempo, pero no puedo encontrar instrucciones relevantes para esta tarea en particular. Soy nuevo en esto, así que pido disculpas si me estoy perdiendo algo básico.

Como muchos fotógrafos, vuelvo de una sesión con una tarjeta que contiene archivos RAW (CR2), JPG y MOV, todos en una misma carpeta. Una vez que copio esta carpeta en mi disco duro, tengo que hacer las siguientes acciones, para las que me gustaría crear un único servicio, de modo que pueda ejecutar este mismo proceso para cualquier carpeta que elija.

Esto es lo que me gustaría automatizar:

  1. Crear carpetas separadas para Raw, JPG y Video dentro de la carpeta seleccionada.
  2. Identifica los archivos de cada tipo y muévelos a las carpetas creadas en el primer paso.

Pensé que esto sería sencillo, pero el problema parece residir en mi necesidad de que esto sea un servicio genérico, no ligado a ninguna ruta de carpeta específica. Necesito que sea repetible para otras carpetas, pero parece que no puedo averiguar ese aspecto esencial de versatilidad.

Ya he encontrado y adaptado un Apple script (ver más abajo) que crea las subcarpetas que necesito. Esa parte funciona bien como servicio por sí sola. Pero no puedo realizar el segundo paso que haría el movimiento real de archivos.

Sé cómo mover archivos de un determinado tipo a un carpeta específica pero eso no es lo que necesito. Necesito que todos los JPG de una determinada carpeta se muevan a una nueva subcarpeta llamada JPG dentro de la carpeta seleccionada y lo mismo para los otros tipos de archivos. Entiendo cómo filtrar esos tipos de archivo, pero hasta ahora no puedo averiguar cómo moverlos a una carpeta sin tener que especificar una ruta, no sé cómo apuntar a carpetas que aún no existen. Incluso si pudiera, esas rutas serán diferentes para cada carpeta en la que tenga que trabajar.

¿Alguien puede aconsejarme o indicarme una discusión relevante?

Muchas, muchas gracias.

///

Aquí está el Apple script para mi servicio de creación de subcarpetas: subfolder script

script texto:

on run {input, parameters}
    set output to {}
    tell application "Finder"
        set {source_folder, source_name} to {it, name} of first item of input
        repeat with prefix in {"JPG - ", "RAW - ", "Edits - ", "Video - "}
            make new folder at source_folder with properties {name:contents of prefix & source_name}
            set end of output to result as alias
        end repeat

Nota: La parte de la automatización de movimiento de archivos no involucrará mi carpeta "Edits - ". Ésta es sólo un contenedor para futuros archivos.

0 votos

¿Seleccionará la carpeta real que se ordenará para ejecutar el servicio, o abrirá la carpeta y luego elegirá ejecutar el servicio desde el Buscador ¿menú?

3voto

qarma Puntos 71

He trabajado con la suposición de que usted seleccionará el actual para pasarlas a su Automatizador flujo de trabajo de servicios a través de, por ejemplo, el menú contextual de servicios del botón derecho del ratón.

Teniendo en cuenta esto, este es el flujo de trabajo de su servicio:

Automator Workflow on macOS

Aquí está el script que va en el Run AppleScript acción:

on run input
    set [input] to the input

    repeat with directory in the input
        organiseFilesOfFolder_(POSIX path of the directory)
    end repeat

end run

to organiseFilesOfFolder:f
    local f

    script SourceFolder
        use sys : application "System Events"

        property location : a reference to folder f of sys
        property name : (a reference to name of my location)

        script JPGs
            property folder : missing value
            property name extension : "jpg"
            property list : {}
            property id : "JPG"
        end script

        script RAWfiles
            property folder : missing value
            property name extension : "cr2"
            property list : {}
            property id : "RAW"
        end script

        script Videos
            property folder : missing value
            property name extension : "mov"
            property list : {}
            property id : "Video"
        end script

        script Edits
            property folder : missing value
            property id : "Edits"
        end script

        to make new "folder" given type:fileType
            [fileType's id, " - ", my name's contents]

            make new folder at my location ¬
                with properties {name:¬
                contents of result as text}

            set the folder of the fileType to the result
        end make

        on listOf:fileItems
            set the list of fileItems to (every file ¬
                of my location where its name extension ¬
                is the name extension of the fileItems)
        end listOf:
    end script

    tell the SourceFolder
        repeat with fileType in its [JPGs, RAWfiles, Videos, Edits]
            make new "folder" given type class:fileType
            if the contents of the fileType = its Edits then ¬
                exit repeat

            if (its listOf:fileType) is not {} then ¬
                tell application "System Events" to move ¬
                    list of fileType to the ¬
                    folder of the fileType
        end repeat
    end tell
end organiseFilesOfFolder:

0 votos

Obviamente, si los requisitos de la OP es AppleScript sólo, entonces eso está bien sin embargo, la OMI es una exageración para una tarea tan simple que se puede hacer en ocho líneas de código en bash utilizando un Run Shell script frente a Run AppleScript. Sin embargo, ¡qué bonito script!

0 votos

@user3439894 dado que el OP proporcionó un intento parcial en AppleScript creo que CJK tiene razón aquí. Aunque creo que ambos enfoques funcionan creo que esta es la mejor respuesta. +1 aquí

0 votos

Debo estar de acuerdo con @user3439894, es totalmente exagerado y no está claro qué extras hace en comparación con su respuesta.

3voto

user3439894 Puntos 5883

Si quisiera crear varias carpetas dentro de una carpeta seleccionada y mover los archivos existentes dentro de la carpeta seleccionada, a las carpetas creadas dentro de la carpeta seleccionada, basándose en la extensión del archivo, entonces usaría bash no AppleScript.

El siguiente servicio toma la(s) carpeta(s) seleccionada(s) en Finder y hace lo siguiente:

  • Crea las siguientes carpetas dentro de la carpeta seleccionada, donde "$nombre_carpeta_padre" es el nombre de la carpeta seleccionada en la que se ejecuta el servicio:
    • "Ediciones - $nombre_de_carpeta_padre"
    • "JPG - $nombre_de_carpeta_padre"
    • "RAW - $nombre_de_carpeta_padre"
    • "Vídeo - $nombre_de_carpeta_de_padre"
  • Mueve los archivos existentes a las carpetas recién creadas en función de la extensión del archivo.

for f in "$@"; do
    cd "$f"
    d="$(basename "$f")"
    mkdir -p "Edits - $d" "JPG - $d" "Raw - $d" "Video - $d"
    mv *.JPG "./JPG - $d"
    mv *.CR2 "./RAW - $d"
    mv *.MOV "./Video - $d"
done

enter image description here

0 votos

Me siento mal por no usar el hermoso applescript de @CJK pero decidí que tu bash será más fácil para un noob como yo de ajustar más tarde. Funciona perfectamente, ¡muchas gracias! Conozco a mucha gente que se alegrará de tener este atajo.

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