# Tester et limiter la taille d'un dossier



## le.tof (31 Mars 2020)

Bonjour,
Je voudrais faire une action de dossier, qui contrôle la taille du dossier chaque fois qu'un fichier et ajouté, et qui ne permet pas l'ajout et renvoi une alerte si le volume du dossier+le nouveau fichier dépasse la taille voulu. Cette alerte demande si je veux créer un nouveau dossier avec le même nom que le précédent mais avec un numéro de séquence +1, et y ajouter le fichier rejeter dans l'autre dossier. Malheureusement, il faut créer le script, et je n'ai pas les compétences. Si quelqu'un peu me mettre sur la voie, pour déjà tester la taille du dossier.
Merci.


----------



## zeltron54 (31 Mars 2020)

Bonjour,
Ce que tu demandes ne me paraît pas réalisable par une action de dossier .
Le script est déclenché lorsque le fichier est ajouté au dossier, il est donc trop tard pour empêcher sa copie.
Je ne vois aucune action qui pourrait convenir pour ce que tu veux réaliser.

les actions qui peuvent déclencher un script sont :

ouverture de la fenêtre du dossier ; 
 lorsque la fenêtre du dossier se ferme ;
quand la fenêtre est déplacée ou redimensionnée;
lorsque des fichiers sont supprimés du dossier ;
lorsque des fichiers sont ajoutés au dossier.


----------



## le.tof (31 Mars 2020)

Merci, pour ta réponse. On peut contourner la chose, mais sa complique encore un peu plus le script à créer je pense. A savoir, lorsque ont ajoute un fichier au dossier, ce dernier est copier, mais si il le dossier dépasse une certaine taille, un alerte nous dit que la limite de taille est atteinte et demande la création d'un nouveau dossier du même nom avec numéro de séquence +1, copie le fichier précédent dans le nouveau dossier créer et l'efface du dossier précédent.


----------



## zeltron54 (31 Mars 2020)

C’est tordu, mais faut essayer!
je regarde dés que j’ai un peu de temps.

par contre je vois un autre problème, si on glisse dépose pour copier plusieurs fichiers d’un coup!


----------



## le.tof (1 Avril 2020)

zeltron54 a dit:


> par contre je vois un autre problème, si on glisse dépose pour copier plusieurs fichiers d’un coup!



Rendre l'action impossible, uniquement fichier par fichier (ou groupe de fichier unifié, dans le cas expliqué ci-dessous). 

Cas des fichiers unifiés : pour des photos avec fichiers RAW, XMP et DOP, je voudrais lier les trois. Je m'explique les fichiers ont le même nom seul l'extension change (.cr2 et .xmp et encore .dop : .cr2 c'est le fichier RAW ; .xmp : c'est les métadonnées classique ; .dop : c'est le fichier "aussi des métadonnées" générer par mon logiciel de développement DXO PhotoLad), je voudrais que ces trois fichiers soient liés entre eux, c'est à dire si un de ces trois fichiers est déplacé, les deux autres suivent automatiquement, est-ce réalisable ? Car, il n'y à pas d'action pour les fichiers dans automator.


----------



## flotow (1 Avril 2020)

Pourquoi ne pas faire un clic droit et appeler le script sur l'un des trois fichiers, et il s'occupe de chercher les deux autres ?
Par contre, ça demande une fenêtre qui va demander à chaque fois ou déplacer, ce qui peut être pénible.


----------



## le.tof (1 Avril 2020)

@flotow, je voudrais que ce soit automatique, juste en faisant un glissé/déposé. C'est pour automatisé tout en minimisant les risques d'erreur mon Workflow photographique.

Les actions de dossier se déclenche lorsque :

des fichiers sont supprimés du dossier ;
Le fait de déplacer un fichier manuellement d'un dossier vers un autre, est-il considéré comme une suppression dans le dossier d'origine par automator ? Si oui, alors on peut demander de vérifier s'il n'existe pas de fichier de nom similaire restant dans le dossier d'origine et s'il y en a alors on les transfères aussi. Le problème est comment transcrire cela en script. 
A ce propos Applescript m'intéresse vraiment, y a t-il un livre de référence pour apprendre ce Language, en français si possible ? 

Merci.


----------



## zeltron54 (1 Avril 2020)

@le.tof. Faudra être patient , je suis en panne d’internet...( free )


----------



## zeltron54 (1 Avril 2020)

Bonsoir,
Retour de la connexion !

Alors je t'ai préparé un petit script qui:
Lorsque 1 ou des fichiers sont glissés dans le dossier:
-copie le fichier dans ce dossier
-vérifie si la taille totale du dossier dépasse la taille maximum renseignée
- Si pas de dépassement de taille OK, sinon crée un nouveau dossier sur le bureau avec comme nom, le nom du dossier de départ avec ajout de "2" (exemple: dossier actuel "maximum" --> crée un dossier "maximum 2" sur le bureau) et y transfère le fichier ayant créé le dépassement de taille. si un dossier de même nom existe, pas de nouvelle création , mais trasfère le fichier dans le dossier existant.
Il te faudra renommer ce nouveau fichier à ta convenance et lui attribuer l'action de dossier.

Dans mon script j'ai fixé (pour essai le maximum à 1 Go.

pour mettre en place ce script action de dossier il faut:


Ouvrir l’application éditeur de script qui se trouve dans application—> utilitaires.
Faire un copier coller du script dans une fenêtre de l’application
Enregistrer sous : (exemple : Taille maxi) sur le bureau
Déplacer ce fichier dans: Utilisateurs —> « le nom d’utilisateurs » —> Bibliothèque —> Scripts —> Folder Action Scripts  (Si les dossiers « scripts » et ou « Folder Action Scripts » n’existent pas il faut les créer.)
Faire un clic droit sur le dossier à surveiller —> service —> Configuration des actions de dossier…
Dans le fenêtre qui s’ouvre (choisir un script à joindre sélectionner le script. Cocher la case en haut à gauche (Activer les actions de dossier).
Voilà on peut tout fermer.

j'attends les résutats de tes tests


```
on adding folder items to Mon_Dossier after receiving Liste_Fichiers
   
    tell application "Finder"
        set lemax to 1.0E+9
       
        repeat with Mon_Item in Liste_Fichiers
            set tailledossier to get size of Mon_Dossier
            set Mon_Ext to name extension of Mon_Item
            set Mon_Nom to name of Mon_Item
            if Mon_Ext is "download" then
                set Mon_Temp to text 1 thru ((length of Mon_Nom) - 9) of Mon_Nom
                set I to length of Mon_Temp
                repeat while character I of Mon_Temp is not "."
                    set I to I - 1
                end repeat
                set Mon_Ext to text (I + 1) thru (length of Mon_Temp) of Mon_Temp
                set Mon_Nom to text 1 thru I of Mon_Temp
            end if
           
            try
                set Mon_Fichier to Mon_Item as alias
                set OldSize to -1
                repeat until (size of Mon_Fichier) = OldSize
                    set OldSize to (size of Mon_Fichier)
                    if OldSize = 0 then set OldSize to -1
                    delay 0.5
                end repeat
            end try
           
            set lefichier to Mon_Item as string
            set infoRec to info for file lefichier --recup taille
            set lataille to size of infoRec
           
            set total to tailledossier + lataille
            if total > lemax then
                set chemin to Mon_Dossier as string
                set Mon_Temp to text 1 thru ((length of chemin) - 1) of chemin
                set I to length of Mon_Temp
                repeat while character I of Mon_Temp is not ":"
                    set I to I - 1
                end repeat
                set Nom_dossier to text (I + 1) thru (length of Mon_Temp) of Mon_Temp
                set Creerdossier to Nom_dossier & " 2"
                set part1 to (path to desktop folder) as string
                set newdossier to part1 & Creerdossier & ":"
                if exists newdossier then
                else
                    make new folder at (path to desktop folder) with properties {name:Creerdossier}
                end if
                set Mon_Item to Mon_Item as string
                move Mon_Item to folder newdossier as alias
            end if
           
        end repeat
       
    end tell
end adding folder items to
```


----------



## zeltron54 (2 Avril 2020)

Bonjour,
Après quelques tests supplémentaires.

Je peux éventuellement ajouter l'action de dossier au nouveau dossier crée, mais si on copie un fichier dont la taille est supérieure à la taille maxi du dossier alors il faut afficher une alerte et sortir du programme sans créer de nouveau dossier sinon on part dans une boucle infinie.. (le fichier est quand même déjà copié ! )

Après tes tests dis moi ce qu'il faut faire...


----------



## le.tof (5 Avril 2020)

Salut, woaw merci beaucoup pour ce script, je vais tester, en essayant de comprendre la chose.


----------

