# Déplacements automatisés de fichiers dans dossiers séparés



## koan_sabian (27 Novembre 2020)

Bonjour,
via un BD j'exporte une liste d'élèves pour chacun de nos professeurs. Le fichier s'appelle "Prénom" "Nom".pdf (exemple : Marcel Test.pdf)
Je souhaiterais faire un script qui m'automatise le déplacement de ces fichiers dans des dossiers spécifiques (en reprenant le titre du fichier comme chemin)


Exemple :

Marcel Test.pdf --> /prof/Marcel Test/Marcel test.pdf
Jean Essai.pdf --> /prof/Jean Essai/Jean Essai.pdf

Est-ce que quelqu'un peut m'éclairer?

Merci d'avance


----------



## zeltron54 (27 Novembre 2020)

Bonsoir,
Si j'ai bien compris le but est de mettre chaque fichier dans un dossier ayant le nom du fichier...
Tous tes fichiers étant dans un dossier, lances ce script, Il te demande de choisir le dossier à traiter et il te prévient lorsqu'il a terminé.


```
set the_folder to quoted form of POSIX path of (choose folder)

do shell script "cd " & the_folder & "
for each in *; do
    if  [ -f \"$each\" ]; then
        nom=${each%.*};
        while [ -e \"$nom\" ]; do
             nom=\"$nom\"_
         done
        /bin/mkdir -p \"$nom\" && /bin/mv -f \"$each\" \"$nom\"
    fi
done"
activate
display alert "Création d'un dossier pour chaque fichier.
Déplacement du fichier dans le dossier créé : Terminé."
```


----------



## koan_sabian (27 Novembre 2020)

Trop cool merci énormément. 
mes dossiers de destinations existent déjà ( donc juste un déplacement. Pas besoin de créer un dossier). 
c est aussi ok avec ce script?

merci encore


----------



## zeltron54 (27 Novembre 2020)

Non , si le dossier existe déjà, il va en créer un nouveau !

Donc il faut réécrire le script avec un test d'existence du dossier avant transfert et création du dossier s'il n'existe pas.

Je regarde ça demain....

Une question: les fichiers à déplacer sont bien dans le même dossier que les dossiers devant les recevoir ?


----------



## zeltron54 (27 Novembre 2020)

Voilà un script, qui te demande de choisir le dossier à traiter.
Il déplace tous les fichiers de ce dossier dans le dossier de même nom,  qui se trouve dans ce même dossier.
Si le dossier de même nom n'existe pas , il en crée un.
Dis moi si cela te convient ?

```
tell application "Finder"
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à trier"
end tell

tell application "Finder"
    set les_fichiers to files of chemin
    repeat with chaque_fichier in les_fichiers
        
        set nom to name of chaque_fichier --récupère le nom du fichier
        set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
        set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
        set elements to text items of nom
        set nomcourt to (items 1 thru -2 of elements) as string
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
        
        set chemin to chemin as string
        set ledossier to chemin & nomcourt & ":"
        
        if exists folder ledossier then
            move chaque_fichier to ledossier
        else
            make new folder at chemin with properties {name:nomcourt}
            move chaque_fichier to ledossier
        end if
        
    end repeat
end tell

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------

