0 votos

<div lang="es">Acción de carpeta andamio</div>

Soy un diseñador gráfico y necesito una estructura de carpetas organizada para todos mis proyectos. Ahora tengo un flujo de trabajo que:

  • pide el nombre del proyecto
  • pide dónde debe guardarse la carpeta del proyecto
  • luego crea las subcarpetas que voy a utilizar.

Como por ejemplo una carpeta llamada "Proyecto 1" y dentro están las subcarpetas llamadas "imágenes", "Photoshop", "borradores", "Illustrator" y así sucesivamente.

Andamiodescribe la imagen aquí

Estoy tratando de crear una acción de carpeta que ordene los archivos que se agregan a la carpeta root del proyecto en la subcarpeta correspondiente, ya sea por extensión de archivo o por parte del nombre del archivo.

Por ejemplo:

  • los archivos .jpg deben ser movidos a la carpeta de imágenes
  • los archivos .psd deben ser movidos a la carpeta de Photoshop
  • los nombres de archivo que contienen la palabra "borrador" deben ser movidos a la carpeta de borradores.

Lo que he intentado hasta ahora es hacer una acción de carpeta que haga esto, pero envía esos archivos a la carpeta originalmente escrita en la acción de carpeta. Si hago una acción de carpeta que envía archivos .psd a la carpeta de Photoshop en "Proyecto 1", entonces esa acción para la siguiente carpeta "Proyecto 2" seguirá enviando esos archivos a la carpeta de Photoshop en "Proyecto 1", en lugar de en "Proyecto 2".

¿Alguna sugerencia sobre cómo hacer esto?

0 votos

No tengo una respuesta sobre cómo escribir la acción de la carpeta de manera que elija dinámicamente la carpeta root correcta (Proyecto 1, Proyecto 2, etc.). Sin embargo, recordé Post Haste, que también podría ser útil para ti. Además, esta otra pregunta podría ser útil.

0 votos

Para una acción de carpeta en Automator, necesitas especificar la carpeta vigilada al guardar el flujo de trabajo. Una acción de carpeta en AppleScript es un poco más flexible, ya que puedes usar el mismo script y especificar la carpeta a través del servicio Configuración de Acciones de Carpeta. De cualquier manera, necesitarás especificar una acción de carpeta para cada carpeta vigilada.

0 votos

JSYK... La acción Run Shell Script mostrada en la captura de pantalla exhibe un uso excesivo innecesario del mkdir comando y en realidad solo necesita ejecutarse dos veces, por ejemplo, mkdir "$1/$2"; cd "$1/$2" || exit; mkdir 'After Effects' 'Assets' 'Audition' 'Drafts' 'Excel' 'Final' 'Fonts' 'Illustrator' 'Images' 'Photoshop' 'Premier' 'Word' -- Ten en cuenta que las comillas simples utilizadas en el segundo mkdir comando solo son necesarias para 'After Effects', sin embargo, mi estilo de codificación suele ser citar todas las cadenas por seguridad y/o claridad visual según corresponda.

1voto

user3439894 Puntos 5883

Aquí está una forma de lograr el objetivo. (No es la única manera de lograr el objetivo.)

Primero haría una plantilla de marcador de posición Acción de Carpeta utilizando Automator y después de crearla, deshabilítela en Configuración de Acción de Carpeta, pero deje el flujo de trabajo disponible donde se guarda. Esto se abrirá al final de la creación de una nueva carpeta de proyecto para luego asignarla y guardarla con su nombre, dejando así la plantilla de marcador de posición Acción de Carpeta disponible para la próxima nueva carpeta de proyecto.

Las imágenes de los dos flujos de trabajo están colocadas en la parte inferior para que la respuesta sea más fácil de leer.

Necesitarás agregar al ejemplo código de script de shell , ya que no se expresaron todas las condiciones en tu pregunta.

_

Plantilla de marcador de posición Acción de Carpeta

Ejemplo código de script de shell:

#!/bin/bash

    # f = ruta de archivo completamente cualificada
    # d = ruta de directorio
    # fn = nombre de archivo con extensión
    # n = nombre de archivo sin extensión
    # e = extensión de archivo

    shopt -s nocasematch

    for f in "$@"; do

        d="${f%/*}"
        fn="${f##*/}"
        # n="${fn%.*}"
        e="${fn##*.}"

        cd "${d}" || exit
        [ -w "${d}" ] || exit

        [[ ${e} == jpg ]] && mv -n "${f}" './Images/'
        [[ ${e} == psd ]] && mv -n "${f}" './Photoshop/'
        [[ ${fn} =~ draft ]] && mv -n "${f}" './Drafts/'

        [ -f "${f}" ] && mkdir -p 'Other'; mv -n "${f}" './Other/'

    done

Nota: La última prueba antes de done maneja cualquier caso no definido previamente. Obviamente puedes optar por no usarlo y eliminarlo del ejemplo código de script de shell.


Crear Estructura de Nueva Carpeta de Proyecto

Para un flujo de trabajo de Automator para crear la nueva carpeta de proyecto, usa la captura de pantalla del siguiente flujo de trabajo:

El ejemplo código de script de shell de la Acción Ejecutar Script de Shell es:

mkdir "$1/$2" || exit
cd "$1/$2" || exit
mkdir 'After Effects' 'Assets' 'Audition' 'Drafts' 'Excel' 'Final' 'Fonts' 'Illustrator' 'Images' 'Photoshop' 'Premier' 'Word'

open "${HOME}/Library/Workflows/Applications/Folder Actions/Foobar.workflow"

Nota: Cambia el nombre del flujo de trabajo de Acción de Carpeta en el ejemplo código de script de shell de Foobar.workflow a cualquiera que sea su nombre real.

También ten en cuenta en la imagen a continuación de la Crear Estructura de Nueva Carpeta de Proyecto flujo de trabajo cómo hay divisiones lógicas entre algunas de las acciones y al final el valor de las dos variables están separadas del resto del flujo de trabajo. Si bien el flujo de trabajo mostrado en la pregunta funciona, en mi opinión esta es una mejor manera de hacerlo ya que divide el flujo de trabajo en bloques de acción lógicos, lo que facilita seguir/comprender lo que hace el flujo de trabajo.

Técnicamente, el Crear Estructura de Nueva Carpeta de Proyecto flujo de trabajo solo necesita una variable y podría estructurarse como, por ejemplo:

  • Solicitar Texto acción
  • Establecer Valor de Variable acción
    • Variable: [Nuevo Proyecto]
  • Solicitar Elementos de Finder acción
    • [Opciones] [√] Ignorar la entrada de esta acción
  • Obtener Valor de Variable acción
    • Variable: [Nuevo Proyecto]
  • Ejecutar Script de Shell acción

Aunque esto funciona y tiene menos acciones que lo que se muestra en la pregunta, sin embargo, como mencioné anteriormente sobre bloques de acción lógicos dentro del flujo de trabajo que hace más fácil seguir/comprender lo que hace el flujo de trabajo.


Configuración de Acción de Carpeta

Configuración de Acción de Carpeta se puede utilizar según sea necesario con cualquier Acción de Carpeta creada.

Configuración de Acción de Carpeta se puede abrir utilizando Spotlight presionando ⌘ Espacio y comenzando a escribir su nombre, luego una vez seleccionado, presiona Enter.


enter image description here


enter image description here

_

0voto

wch1zpink Puntos 11

He aquí una enfoque diferente que no utiliza Automator.

Lo siguiente AppleScript le pide que elija un nombre para su nuevo Proyecto artístico y dónde crear el Proyecto y sus directorios.

Una vez creada la estructura de directorios del proyecto, se creará un nuevo directorio Carpeta Acción será se crearán, guardarán y adjuntarán automáticamente a la nueva carpeta del proyecto .

Lo único que realmente hay que hacer es editar algunos de los valores de la directiva script. script artProjectsFileProcessor . Esta es la parte del código que le dice al Carpeta Acción qué hacer con los archivos que se añaden a la carpeta del proyecto. He añadido algunos conditional statements para que empieces por el buen camino.


global createProject, projectName, newProjectFolderLocation, artProjectsFileProcessor

property pathToFolderActions : ((path to scripts folder as text) & "Folder Action Scripts:")
property artProjectsFileProcessorFolderAction : "Art Projects Files Processor.scpt"
property subFolderNames : "After Effects
    Assets
    Audition
    Drafts
    Excel
    Final
    Fonts
    Illustrator
    Images
    Photoshop
    Premiere
    Word"

tell application "System Events" to set folderActionExists to exists of ¬
    alias (pathToFolderActions & artProjectsFileProcessorFolderAction)

--if not folderActionExists then
store script artProjectsFileProcessor in ¬
    pathToFolderActions & artProjectsFileProcessorFolderAction replacing yes
--end if

activate
set newProjectFolderLocation to POSIX path of ¬
    (choose folder with prompt "Choose A Location To Create Yor New Project Directory")

tell application "System Events"
    set existingFolders to name of folders of folder newProjectFolderLocation
end tell

set projectName to createProject()

if projectName is in existingFolders then
    repeat while projectName is in existingFolders
        display dialog "A project with that name already exists." & linefeed & ¬
            "Please choose a different name for your new project" buttons ¬
            {"Cancel", "OK"} default button "OK"
        set projectName to createProject()
        delay 0.1
    end repeat
end if

do shell script "echo " & quoted form of subFolderNames & " | xargs -I {} mkdir -p " & ¬
    quoted form of POSIX path of newProjectFolderLocation & quoted form of projectName & "/{}"

attachFolderActionToFolder(projectName, newProjectFolderLocation, artProjectsFileProcessorFolderAction)

tell application "System Events"
    if not folder actions enabled then set folder actions enabled to true
end tell

set alertChoice to button returned of (display alert ¬
    "Art Project Created" message "Your new art project " & projectName & ¬
    " has been created in the directory... " & ¬
    newProjectFolderLocation & linefeed & linefeed & ¬
    "Folder Actions for this project are enabled and files are ready to be processed." buttons ¬
    {"Show In Finder", "OK"} default button 2 giving up after 20)

if alertChoice = "Show In Finder" then
    do shell script "open -R " & quoted form of POSIX path of ¬
        newProjectFolderLocation & quoted form of projectName
end if

on createProject()
    activate
    set projectName to text returned of ¬
        (display dialog "Entering a new project name will create a project folder with all necessary sub-folders" & ¬
            linefeed & linefeed & "After your project directories structure has been created,
 a new folder action will be created and automatically attached to your new project folder.
 It will then be ready to process any files added to it" default answer ¬
            "My New Project" buttons {"Cancel", "Create My Project"} ¬
            default button 2 cancel button 1 with title "New Project Creation")
    return projectName
end createProject

to attachFolderActionToFolder(projectName, newProjectFolderLocation, artProjectsFileProcessorFolderAction)
    tell application "Folder Actions Setup"
        launch
        delay 1
        try
            set addedFolderAction to make new folder action with properties ¬
                {name:projectName, path:(newProjectFolderLocation & projectName)}
        end try
        try
            delay 0.5
            tell addedFolderAction to make new script with properties ¬
                {name:artProjectsFileProcessorFolderAction, path:(pathToFolderActions & artProjectsFileProcessorFolderAction)}
        end try
    end tell
    delay 1
    tell application "Folder Actions Setup" to quit
end attachFolderActionToFolder

script artProjectsFileProcessor
    property afterEffectsFiles : {}
    property assetsFiles : {}
    property auditionFiles : {}
    property draftsFiles : "Draft"
    property excelFiles : {"xls"}
    property finalFiles : {}
    property fontsFiles : {"ttf"}
    property illustratorFiles : {"ai", "eps"}
    property imagesFiles : {"png", "jpg", "bmp"}
    property photoshopFiles : {"psd"}
    property premierFiles : {}
    property wordFiles : {"doc", "txt"}

    on adding folder items to theFolder after receiving theNewItems
        repeat with thisItem in theNewItems
            tell application "System Events"
                set nameExtension to name extension of thisItem
                set theName to name of thisItem
                if theName contains draftsFiles then
                    move thisItem to folder "Drafts" of theFolder
                else if nameExtension is in afterEffectsFiles then
                    move thisItem to folder "After Effects" of theFolder
                else if nameExtension is in assetsFiles then
                    move thisItem to folder "Assets" of theFolder
                else if nameExtension is in auditionFiles then
                    move thisItem to folder "Audition" of theFolder
                else if nameExtension is in excelFiles then
                    move thisItem to folder "Excel" of theFolder
                else if nameExtension is in finalFiles then
                    move thisItem to folder "Final" of theFolder
                else if nameExtension is in fontsFiles then
                    move thisItem to folder "Fonts" of theFolder
                else if nameExtension is in illustratorFiles then
                    move thisItem to folder "Illustrator" of theFolder
                else if nameExtension is in imagesFiles then
                    move thisItem to folder "Images" of theFolder
                else if nameExtension is in photoshopFiles then
                    move thisItem to folder "Photoshop" of theFolder
                else if nameExtension is in premierFiles then
                    move thisItem to folder "Premier" of theFolder
                else if nameExtension is in wordFiles then
                    move thisItem to folder "Word" of theFolder
                end if
            end tell
        end repeat
    end adding folder items to
end script

He guardado este código como "Art Project Creator.scpt" en mi /Users/ MYSHORTNAME /Library/scripts/Applications/Finder carpeta. Esto me permite ejecutar archivos .scpt directamente desde el menú scripts de la barra de menús, cuando Finder es la aplicación activa.

Este código también podría guardarse como Aplicación y se ejecutará cada vez que se haga doble clic sobre él en el Finder. Otra opción podría ser crear un nuevo Acción rápida de Automator e inserte este código en un archivo " Ejecutar AppleScript "al flujo de trabajo, lo que permite que el código se ejecute mediante el comando Menú contextual de acciones rápidas en Finder.

enter image description here


Esta primera animación demuestra la creación de un nuevo Proyecto de Arte con sus subdirectorios.(Recuerde que una nueva Acción de Carpeta será automáticamente creada, guardada y adjuntada a su nueva carpeta de Proyecto).

enter image description here


Esta segunda animación demuestra la adición de archivos a la nueva Carpeta de Proyecto y los resultados de las nuevas ubicaciones de los archivos, procesados a partir del código en su recién adjuntado Carpeta Acción

enter image description here

0 votos

RE: "Debido a la hora actual, afinaré el código y añadiré algunos comentarios descriptivos mañana." -- Este es un buen comienzo y estoy interesado en ver qué más añades. Dicho esto, me gustaría hacer un par de sugerencias. 1. Con property pathToFolderActions el path to workflows folder normalmente se utiliza para Automator creados Folder Action. La ruta para AppleScript basado en .scpt Folder Actions es ~/Library/Scripts/Folder Action Scripts, para lo cual puedes usar property pathToFolderActions : ((path to scripts folder as text) & "Folder Action Scripts:") en su lugar.

0 votos

2. El tell application "Finder" to set folderActionExists to exists … realmente debería usar System Events, ya que incurre en menos sobrecarga y Finder debería evitarse en favor de System Events siempre que sea posible. 3. Este es el problema más evidente, lo siento... El uso de mensajes en Capital Case es mucho más difícil de leer, va en contra de la norma de la industria y ciertamente no es realizado por desarrolladores de primera categoría. Esto no quiere decir que nunca se deba usar Capital Case ya que en algunas circunstancias, aunque muy pocas, puede ser apropiado, por ejemplo, como el título de un mensaje.

0 votos

También, por favor, no uses Mayúsculas en los comentarios del código por las mismas razones. -- Como empecé a escribir esto antes de tu última actualización, dejo la parte citada ahora eliminada de mi primer comentario.

-1voto

HUSTEN Puntos 118

Mi enfoque:

Dado que ya tienes muchas archivos, asumo que están dentro de una carpeta root. Una acción rápida de carpeta puede:

  1. Renombrarla con el texto solicitado.
  2. Guardar la ruta en una variable para que puedas buscar y mover archivos dentro de ella.
  3. Duplicar una plantilla de algún otro lugar en tu disco duro con todas las carpetas posibles preorganizadas y copiarlas en la ruta.
  4. Después de que la estructura de carpetas para tu proyecto dado esté lista, buscar el tipo de archivo X. Buscar la carpeta X. Mover el tipo de archivo X a la carpeta X. Repetir para el tipo de archivo Y. Etc. Si buscas dentro de la ruta, no interferirás con otros proyectos.
  5. Al final, buscar las carpetas vacías y eliminarlas, de esta forma solo tendrás las carpetas que necesitas.

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