0 votes

Echafaudage de l'action du dossier

Je suis graphiste et j'ai besoin d'un échafaudage de dossiers organisés pour tous mes projets. J'ai maintenant un flux de travail qui :

  • demande le nom du projet
  • demande où le dossier du projet doit être stocké
  • puis crée les sous-dossiers que je vais utiliser.

Par exemple, un dossier nommé "Projet 1" contient des sous-dossiers nommés "images", "Photoshop", "brouillons", "Illustrator", etc.

Scaffoldenter image description here

J'essaie de créer une action de dossier qui trie les fichiers qui sont ajoutés au dossier racine du projet dans le sous-dossier approprié, soit par extension de fichier, soit par partie du nom du fichier.

Par exemple :

  • .jpg doivent être déplacés vers le dossier image.
  • .psd Les fichiers doivent être déplacés vers le dossier Photoshop
  • les noms de fichiers qui contiennent le mot "brouillon" doivent être déplacés vers le dossier des brouillons.

Ce que j'ai essayé jusqu'à présent, c'est de créer une action de dossier qui fait cela, mais qui envoie ces fichiers dans le dossier initialement écrit dans l'action de dossier. Si je crée une action de dossier qui envoie .psd vers le dossier Photoshop dans "Projet 1", alors cette action vers le dossier suivant "Projet 2" enverra toujours ces fichiers vers le dossier Photoshop dans "Projet 1", au lieu de dans "Projet 2".

Avez-vous des suggestions sur la manière de procéder ?

0 votes

Je n'ai pas de réponse sur la façon d'écrire l'action de dossier de sorte qu'elle choisisse dynamiquement le bon dossier racine (Projet 1, Projet 2, etc...). Cependant, je me suis souvenu Post Haste qui pourrait vous être utile à vous aussi. Voici également autre question pourrait être utile.

0 votes

Pour une action de dossier Automator, vous devez spécifier le dossier surveillé lors de l'enregistrement du flux de travail. Une action de dossier AppleScript est un peu plus flexible, dans la mesure où vous pouvez utiliser le même script et spécifier le dossier via l'attribut Folder Actions Setup service. Dans tous les cas, vous devrez spécifier une action de dossier pour chaque dossier surveillé.

0 votes

JSYK... Le site Exécuter le Shell script action montrée dans la capture d'écran montre une surutilisation inutile de l'option mkdir commande et ne doit en fait être exécuté que deux fois, par ex. mkdir "$1/$2"; cd "$1/$2" || exit; mkdir 'After Effects' 'Assets' 'Audition' 'Drafts' 'Excel' 'Final' 'Fonts' 'Illustrator' 'Images' 'Photoshop' 'Premier' 'Word' -- Notez que le guillemets simples utilisé dans le deuxième mkdir commande ne sont nécessaires que pour "After Effects", cependant, mon style de codage consiste généralement à citer tous les éléments de la base de données. chaînes de caractères pour la sécurité et/ou la clarté visuelle, le cas échéant.

1voto

user3439894 Points 52496

Voici a la façon d'atteindre l'objectif. (Ce n'est pas la seule façon d'atteindre l'objectif).

D'abord, je ferais un modèle de remplacement Action des dossiers en utilisant Automator et après l'avoir créé, désactivez-le dans Configuration de l'action du dossier mais laissez le flux de travail disponible où il est enregistré. Elle sera ouverte à la fin de la création d'une nouveau dossier de projet lui sera alors attribué et enregistré comme son nom, laissant ainsi le modèle de remplacement Action des dossiers disponible pour le prochain nouveau dossier de projet .

Les images des deux flux de travail sont placés en bas afin de faciliter la lecture de la réponse.

Vous devrez ajouter à la exemple shell script code car toutes les conditions n'ont pas été exprimées dans votre question.


Modèle de placement Action des dossiers

Exemple shell script code :

#!/bin/bash

    # f = fully qualified pathname
    # d = directory pathname
    # fn = filename with extension
    # n = filename without extension
    # e = filename extension

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

Note : La dernière test avant done gère tout cas qui ne sont pas déjà définis. Évidemment, vous pouvez choisir de ne pas l'utiliser et de le supprimer de la liste de contrôle. exemple shell script code .


Créer une nouvelle structure de dossiers de projet

Pour un Automator flux de travail pour créer le nouveau dossier de projet Utilisez la capture d'écran suivante flux de travail :

El exemple shell script code de la Exécuter le Shell script action est :

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"

Note : Changez le nom de la Action des dossiers flux de travail dans le exemple shell script code de Foobar.workflow quelle que soit sa valeur réelle nom est.

Notez également dans l'image ci-dessous de la Créer une nouvelle structure de dossiers de projet flux de travail comment il y a des ruptures logiques entre certains des actions et à la fin, le valeur des deux variables sont séparés du reste de la flux de travail . Alors que le flux de travail montré dans la question fonctionne, néanmoins, à mon avis, c'est une meilleure façon de le faire, car elle rompt l'obligation d'utiliser la méthode de l'utilisateur final. flux de travail en blocs d'actions logiques ce qui permet de suivre/comprendre plus facilement ce que l'on veut faire. flux de travail fait.

Techniquement, le Créer une nouvelle structure de dossiers de projet flux de travail n'en a besoin que d'un seul variable et il pourrait être structuré comme suit, par exemple

  • Demande de texte action
  • définir la valeur de la variable action
    • Variable : [Nouveau projet]
  • Demandez les articles Finder action
    • [Optons] [] Ignorer l'entrée de cette action
  • Obtenir la valeur d'une variable action
    • Variable : [Nouveau projet]
  • Exécuter le Shell script action

Même si cela fonctionne et a moins actions que ce qui est montré dans la question, néanmoins, comme je l'ai mentionné plus tôt au sujet de blocs d'actions logiques au sein de la flux de travail ce qui permet de suivre/comprendre plus facilement ce que les flux de travail fait.


Configuration de l'action du dossier

Configuration de l'action du dossier peut être utilisé pour travailler avec, selon les besoins, tout Action des dossiers créé.

Configuration de l'action du dossier peut être ouvert en utilisant Spotlight en appuyant sur Espace et commencez à taper son nom, puis une fois sélectionné, appuyez sur Entrez .


enter image description here


enter image description here

0voto

wch1zpink Points 6067

Voici un une approche différente qui n'utilise pas Automator.

Ce qui suit AppleScript en bref, vous invite à choisir un nom pour votre nouvelle Projet artistique et où créer le projet et ses répertoires.

Après que la structure des répertoires du projet a été créée, un nouveau fichier Action des dossiers sera alors automatiquement créés, sauvegardés et joints à votre nouveau dossier de projet .

La seule chose à faire est de modifier certaines des valeurs dans le fichier Objet script script artProjectsFileProcessor . Il s'agit de la partie du code qui indique au Action des dossiers ce qu'il faut faire avec les fichiers qui sont ajoutés au dossier du projet. J'ai ajouté quelques conditional statements pour vous mettre sur la bonne voie.


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

J'ai sauvegardé ce code sous le nom de "Art Project Creator.scpt" dans mon /Users/ MYSHORTNAME /Bibliothèque/scripts/Applications/Finder dossier. Cela me permet d'exécuter les fichiers .scpt directement à partir du menu scripts dans la barre de menu, lorsque Finder est l'application active.

Ce code pourrait également être sauvegardé comme un Application et s'exécutera chaque fois qu'il sera doublement cliqué dans le Finder. Une autre option pourrait être de créer un nouveau Action rapide d'Automator et insérez ce code dans un fichier " Exécuter AppleScript "au flux de travail, ce qui permet au code de s'exécuter par le biais de la commande Menu contextuel des actions rapides dans le Finder.

enter image description here


Cette première animation montre la création d'un nouveau projet artistique et de ses sous-répertoires (n'oubliez pas qu'un nouveau dossier d'action sera automatiquement créé, sauvegardé et attaché à votre nouveau dossier de projet).

enter image description here


Cette deuxième animation montre l'ajout de fichiers au nouveau dossier de projet et les résultats des nouveaux emplacements des fichiers, traités à partir du code dans le nouveau dossier de projet. Action des dossiers

enter image description here

0 votes

RE : " Vu l'heure qu'il est, je vais peaufiner le code et ajouter des commentaires descriptifs demain. "C'est un bon début et je suis curieux de voir ce que vous allez ajouter. Cela dit, j'aimerais faire quelques suggestions. 1. Avec property pathToFolderActions le site path to workflows folder est normalement utilisé pour Automator créé Action des dossiers . Le chemin pour AppleScript .scpt basé sur Actions des dossiers es ~/Bibliothèque/scripts/Dossier Action scripts pour lequel vous pouvez utiliser property pathToFolderActions : ((path to scripts folder as text) & "Folder Action Scripts:") à la place.

0 votes

2. Le site tell application "Finder" to set folderActionExists to exists … devrait vraiment utiliser Événements du système car elle entraîne moins de frais généraux et Finder doit être évitée au profit de Événements du système le cas échéant. 3. Celui-ci est le problème le plus flagrant, désolé L'utilisation de Affaire capitale Les messages sont beaucoup plus difficiles à lire, vont à l'encontre des normes du secteur et ne sont certainement pas réalisés par des développeurs de premier ordre. Cela ne veut pas dire qu'il ne faut jamais utiliser Affaire capitale car dans certaines circonstances, même si elles sont très rares, il peut se prêter de manière appropriée, par exemple, comme le titre à un message.

0 votes

Aussi, s'il vous plaît, n'utilisez pas Affaire capitale dans les commentaires du code pour les mêmes raisons. -- Comme j'ai commencé à écrire ce texte avant votre dernière mise à jour, je laisse la partie citée de mon premier commentaire, maintenant supprimée.

-1voto

Mateus Ribeiro Points 877

Mon approche :

Comme vous avez déjà beaucoup de fichiers, je suppose qu'ils se trouvent dans un dossier racine. Une action rapide sur un dossier peut :

  1. Renommez-le avec le texte demandé.
  2. Stockez le chemin d'accès dans une variable afin de pouvoir y rechercher et déplacer des fichiers.
  3. Dupliquez un modèle à partir d'un autre endroit de votre disque dur avec tous les dossiers possibles pré-arrangés et copiez-les dans le chemin.
  4. Une fois que la structure du dossier pour votre projet donné est prête, rechercher le type de fichier X. Rechercher le dossier X. Déplacer le type de fichier X vers le dossier X. Répétez l'opération pour le type de fichier Y. Etc. Si vous cherchez à l'intérieur du chemin, vous n'aurez pas à vous mêler aux autres projets.
  5. À la fin, recherchez les dossiers vides et supprimez-les, de sorte que vous n'aurez que les dossiers dont vous avez besoin.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X