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 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, todo en una sola carpeta. Una vez que copio esta carpeta a mi disco duro, debo realizar las siguientes acciones, para lo cual 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:
Pensé que esto sería simple, pero el problema parece radicar 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 descifrar ese aspecto esencial de versatilidad.
Ya encontré y adapté un Apple Script (ver más abajo) que crea las subcarpetas que necesito. Esa parte funciona bien como servicio por sí sola. Pero parece que no puedo realizar el segundo paso que haría el movimiento real del archivo.
Sé cómo mover archivos de cierto 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 lo mismo para los otros tipos de archivos. Entiendo cómo filtrar esos tipos de archivos, pero hasta ahora no puedo descifrar cómo moverlos a una carpeta sin tener que especificar una ruta, no sé cómo señalar carpetas que aún no existen. Incluso si pudiera, esas rutas serán diferentes para cada carpeta en la que necesite trabajar.
¿Alguien puede darme un consejo o señalarme una discusión relevante?
Muchas muchas gracias.
///
Aquí está el Apple Script para mi servicio de creación de subcarpetas:
Texto del 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 movimiento de archivos de la automatización no involucrará 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 no usaría AppleScript bash
.
El siguiente servicio toma las carpetas seleccionadas en Finder y hace lo siguiente:
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
Partí de la suposición de que seleccionará las carpetas reales para pasarlas a su flujo de trabajo de servicio de Automator a través, por ejemplo, del menú de servicios contextual del botón derecho.
Dado esto, así es como se vería su flujo de trabajo de servicio:
Aquí está el guión que va en la 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:
bash
Run Shell Script vs. Run AppleScript. ¡Buen guión, sin embargo!hit
hit
. Quise decir que si crees que Bash es el mejor enfoque, ¿por qué no votas a favor de la solución? Voté a favor de CJK porque respondió la pregunta con AppleScript puro, ya que parece que esa fue la solicitud. Si el usuario hubiera incluido una solución de AppleScript pero luego hubiera mencionado cómo Bash es mejor, también habría votado a favor de él. Si el usuario hizo eso, entonces esa respuesta sería el mejor enfoque.Please avoid extended discussions in comments.
así que dejémoslo así. En última instancia, el OP decidirá.
CJK