Automator: servicio para mover archivos a nuevas subcarpetas según la extensión de archivo * dentro de cualquier carpeta seleccionada *

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

Como muchos fotógrafos, vuelvo de una sesión fotográfica con una tarjeta que contiene archivos RAW (CR2), JPG y MOV, todo en una sola carpeta. Una vez que copie esta carpeta en mi disco duro, debo realizar las siguientes acciones, para las que me gustaría crear un solo servicio, de modo que pueda ejecutar este mismo proceso para cualquier carpeta que elija.

Así que esto es lo que me gustaría automatizar:

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

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

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

Sé cómo mover archivos de un determinado tipo a una carpeta específica, pero eso no es lo que necesito. Necesito que todos los JPG en una carpeta determinada se muevan a una nueva subcarpeta llamada JPG dentro de la carpeta seleccionada y de la misma manera para los otros tipos de archivos. Entiendo cómo filtrar esos tipos de archivos, pero hasta ahora no puedo entender 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 necesito trabajar.

¿Alguien puede dar consejos o indicarme una discusión relevante?

Muchas muchas gracias.

///

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

Texto de guión:

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 que mueve archivos no involucrará a mi carpeta “Ediciones -“. Esto es solo un contenedor para futuros archivos.

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, según la extensión del archivo, entonces usaría bash no AppleScript.

El siguiente servicio toma las carpetas seleccionadas en Finder y hace lo siguiente:

  • Crea las siguientes carpetas dentro de la carpeta seleccionada donde “$ parent_folder_name” es el nombre de la carpeta seleccionada en la que se ejecuta el servicio:
    • “Ediciones – $ parent_folder_name”
    • “JPG – $ parent_folder_name”
    • “RAW – $ parent_folder_name”
    • “Video – $ parent_folder_name”
  • Mueve los archivos existentes a la base de carpetas recién creadas en 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 

introduzca la descripción de la imagen aquí

Supuse que seleccionará las carpetas reales para pasarlas al flujo de trabajo del servicio de Automator , por ejemplo, mediante el menú contextual de servicios de clic derecho.

Teniendo en cuenta esto, esto es cómo se vería su flujo de trabajo de servicio:

Automator Workflow en macOS

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

 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: 
    Intereting Posts