Automator - Différencier fichiers manquants

Gregoryen

Membre actif
Club MacG
16 Juin 2013
529
27
30
Saint-Martin-de-Crau
www.gregoryen.fr
Bonjour, je cherche à réaliser un script avec automator, voici l'explication que j'ai essayé de faire au plus simple pour ne pas rentrer dans les détails et compliquer la chose.

J'ai trois dossiers sur mon bureau :

Dossier A : Il contient tous mes fichiers que je dois trier et séparer selon les règles citées plus bas.
Dossier B : C'est le dossier " tampon " qui me permet de faire un premier tri pour vérification manuelle par la suite.
Dossier C : C'est le dossier final ou tout sera rangé.

Je suis actuellement en train de trier certains fichiers du "Dossier A" . Il y a en plusieurs centaines, et je dois faire cela assez régulièrement ce qui fait que je dois trier des milliers de fichiers en réalité.

Plusieurs de ces fichiers ont le même nom mais ne finissent pas pareil.

Par exemple :

Test (A).zip
Test (B).zip
Test (C).zip

MacG (A).zip
MacG (B).zip
MacG (C).zip


Et certains fichiers n'ont qu'un seul nom unique :

Photo (B2).zip
Document (B6).zip

J'ai besoin d'avoir tous les fichiers avec la parenthèse B "(B)" (ils correspondent à ce que je veux).
Donc jusque-là dans automator je fais une recherche de fichier contenant (B) et je le déplace dans mon dossier final "Dossier C".

Donc mon "Dossier A" se retrouve comme ceci :

Test (A).zip
Test (C).zip

MacG (A).zip
MacG (C).zip

Photo (B2).zip
Document (B6).zip

C'est là que j'ai besoin de votre aide. J'ai besoin de créer un script qui va comparer le "Dossiers A" et le "Dossier C".
Tous les fichiers qui dont dans le "Dossier A" mais qui sont manquants dans le "Dossier C", soit déplacés dans le "Dossier B".
(On peut dans cet exemple prendre les 4 premiers caractères du nom de tous les fichiers du "Dossier A" et voir s'ils sont présents dans le "Dossier C")


Pourquoi le "Dossier B" ? Car je veux vérifier manuellement avant de les mettre dans le "Dossier C".

Donc le script va vérifier qu'il existe déjà des fichiers tels que "Test" et " MacG " alors ces fichiers la ne seront pas déplacés, mais les fichiers tels que " Phot" pour Photo et "Docu" pour Document seront déplacés.

J'espère avoir été clair, si quelqu'un peut m'aider à réaliser ce script ça m'avancerais énormément dans cette tache. Merci beaucoup et bonne journée !
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 228
349
Lorraine
Bonjour,
Un petit applescript devrait faire l'affaire.
Il doit:
Vérifier le nom du fichier avant le "("
Si ce nom est unique il déplace le fichier dans la dossier C
Si ce nom est répété il déplace ces fichiers dans le dossier C s 'il contiennent (B) sinon dans le dossier B.
Ci-dessous le script.
Au lancement il te demande de sélectionner: le dossier des originaux à trier, le dossier pour réception des (B), et enfin le dossier pour réception des à vérifier.

Il suffit d'attendre la fin du traitement.

Bloc de code:
tell application "Finder"

    set source to choose folder with prompt "Sélectionnez le dossier contenant les fichiers Originaux à trier" as string

    set cible to choose folder with prompt "Sélectionnez le dossier pour réception des (B)" as string

    set supprime to choose folder with prompt "Sélectionnez le dossier pour réception des à vérifier" as string

    

    set dossierorig to source as string

    set les_fichiers to files of source

    set ledernier to ""

    set maliste to {}

    

    repeat with chaque_fichier in les_fichiers

        set nom to name of chaque_fichier

        set sauv to AppleScript's text item delimiters

        set AppleScript's text item delimiters to {"."}

        set elements to text items of nom

        set AppleScript's text item delimiters to sauv

        

        set nomcourt to characters 1 thru ((offset of "(" in nom) - 1) of nom as string

        

        if ledernier is not "" then

            if nomcourt is not ledernier then

                set nb to length of maliste

                if nb = 1 then

                    move item 1 of maliste to cible

                else

                    repeat with i in maliste

                        set lenom to name of i

                        if lenom contains "(B)" then

                            move i to cible

                        else

                            move i to supprime

                        end if

                    end repeat

                end if

                set maliste to {}

                set ledernier to nomcourt

                

            else

                set ledernier to nomcourt

            end if

        else

            set ledernier to nomcourt

        end if

        set end of maliste to chaque_fichier

    end repeat

    repeat with i in maliste

        set lenom to name of i

        if lenom contains "(B)" then

            move i to cible

        else

            move i to supprime

        end if

    end repeat

end tell



tell application "Finder"

    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})

end tell
 
Dernière édition:
  • J’aime
Réactions: Gregoryen

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 228
349
Lorraine
Oups !
Je viens de voir un bugs après plusieurs test , je cherche pour corriger ....
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 228
349
Lorraine
Voilà bug trouvé et corrigé.

Bloc de code:
tell application "Finder"
    set source to choose folder with prompt "Sélectionnez le dossier contenant les fichiers Originaux à trier" as string
    set cible to choose folder with prompt "Sélectionnez le dossier pour réception des (B)" as string
    set supprime to choose folder with prompt "Sélectionnez le dossier pour réception des a vérifier" as string
    
    set dossierorig to source as string
    set les_fichiers to files of source
    set ledernier to ""
    set maliste to {}
    
    repeat with chaque_fichier in les_fichiers
        set nom to name of chaque_fichier
        set sauv to AppleScript's text item delimiters
        set AppleScript's text item delimiters to {"."}
        set elements to text items of nom
        set AppleScript's text item delimiters to sauv
        
        set nomcourt to characters 1 thru ((offset of "(" in nom) - 1) of nom as string
        
        if ledernier is not "" then
            if nomcourt is not ledernier then
                set nb to length of maliste
                if nb = 1 then
                    move item 1 of maliste to cible
                else
                    repeat with i in maliste
                        set lenom to name of i
                        if lenom contains "(B)" then
                            move i to cible
                        else
                            move i to supprime
                        end if
                    end repeat
                end if
                set maliste to {}
                set ledernier to nomcourt
                
            else
                set ledernier to nomcourt
            end if
        else
            set ledernier to nomcourt
        end if
        set end of maliste to chaque_fichier
    end repeat
    
    set nb to length of maliste
    if nb = 1 then
        move item 1 of maliste to cible
    else
        repeat with i in maliste
            set lenom to name of i
            if lenom contains "(B)" then
                move i to cible
            else
                move i to supprime
            end if
        end repeat
    end if
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Dernière édition:
  • J’aime
Réactions: Gregoryen