Renommer fichiers en masse puis les déplacer dans un dossier parent

Cri_fra

Nouveau membre
18 Novembre 2020
5
0
50
Bonjour à tous,

Je découvre l'univers du MAC et automator.

J'ai dans un dossier 1, plusieurs sous dossier A à F (par exemple). Dans chaque sous dossier il y a un fichier au format PDF parfois .pages
J'aimerai renommer chaque fichier avec le nom du sous-dossier et qu'ensuite ce fichier renommer soit déplacer dans le dossier 1.
Le grand luxe serait la conversion de format pages en PDF. ( j'ai trouvé sur le forum le script que Zeltron 54 a rédigé,https://forums.macg.co/threads/automator-page-pdf.1268151/ un grand merci d'ailleurs, cela me fait gagner beaucoup de temps)

J'ai essayé avec Automator, mais je ne peux ( ou ne sais) pas choisir le nom du dossier parent.
J'arrive plus ou moins à déplacer des fichiers d'un sous-dossier vers le dossier parent, j'ai une erreur sur la dernière étape. Je vous joins les captures d'écran de mon test.
Merci pour votre aide.
Capture d’écran 2020-11-18 à 17.02.29.jpg
Capture d’écran 2020-11-18 à 17.02.52.jpg
 
Dernière édition:

zeltron54

Membre d’élite
29 Mars 2008
2 042
321
Lorraine
bonsoir,
Pour faire cela, il faut être sur qu'il n'y ai qu'un seul fichier dans chaque sous dossiers ?

Ensuite pour transformer les pages en pdf tu te sers du script que tu cites en l'appliquant au dossier.

Donc le tout en 2 fois (2 script différent).
 

Cri_fra

Nouveau membre
18 Novembre 2020
5
0
50
Bonsoir,
Dans chaque sous dossier, il n'y a qu'un seul fichier.
Si jamais il y en a deux, est-ce un problème ?
Merci de ton aide.
 

zeltron54

Membre d’élite
29 Mars 2008
2 042
321
Lorraine
oui s'il y en a plusieurs, lorsque on va renommer le 2ieme , le nom existera déja, donc erreur.
 

zeltron54

Membre d’élite
29 Mars 2008
2 042
321
Lorraine
OK !
Alors essai ce script et dis moi si cela te convient.

Bloc de code:
property origine : ""
tell application "Finder"
    
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à trier"
    set origine to chemin as string
    my inspecter(chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
        
        set les_fichiers to files of un_dossier
        
        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 lextension to name extension of chaque_fichier -- ou (document file nom in cible)
            set chemindossier to container of chaque_fichier ---- idem cible as string
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            
            set xx to chemindossier as string
            
            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 dd to text item -2 of xx
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            set name of chaque_fichier to dd & "." & lextension
            set newfich to xx & dd & "." & lextension
            --deplace dans dossier origine
            move newfich to origine
        end repeat
        
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier)
        end repeat
        
    end tell
end inspecter

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

Cri_fra

Nouveau membre
18 Novembre 2020
5
0
50
Bonsoir,
Super cela fonctionne.
Serait-il possible de garder le nom du fichier et d'y rajouter le nom du dossier, c'est ce que je voulais mais j'ai oublié de le dire :( :

Exemple:
Nom du sous dossier : prenom nom
Nom du fichier : PC5
Nom final : prenom_nom_PC5

Est-il possible de supprimer les dossiers vides à la fin ?

Désolée, de me montrer plus exigeante, mais étant donné ton efficacité, j'en abuse.

Merci.
 

zeltron54

Membre d’élite
29 Mars 2008
2 042
321
Lorraine
Alors voilà les changements

dis moi si c'est bon pour toi .

Bloc de code:
property origine : ""
tell application "Finder"
    
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à trier"
    set origine to chemin as string
    my inspecter(chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
        
        set les_fichiers to files of un_dossier
        
        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 lextension to name extension of chaque_fichier -- ou (document file nom in cible)
            set chemindossier to container of chaque_fichier ---- idem cible as string
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            
            set xx to chemindossier as string
            
            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 dd to text item -2 of xx
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            set name of chaque_fichier to dd & "_" & nomcourt & "." & lextension
            set newfich to xx & dd & "_" & nomcourt & "." & lextension
            
            --deplace dans dossier origine
            move newfich to origine
            do shell script "rm -R " & quoted form of POSIX path of xx
        end repeat
        
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier)
        end repeat
        
    end tell
end inspecter

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

Cri_fra

Nouveau membre
18 Novembre 2020
5
0
50
Bonsoir,
C'est super cela fonctionne. Merci.
J'ai utilisé le script pour convertir les .pages en .PDF cela fonctionne aussi bien que j'ai un message d'erreur à la fin.
Les fichiers sont pourtant tous bien convertis dans le dossier destination.
Je te joins la capture d'écran.
Encore merci.
Capture d’écran 2020-11-18 à 21.59.27.jpg
 

zeltron54

Membre d’élite
29 Mars 2008
2 042
321
Lorraine
Je ne vois pas d’où viens l’erreur, une histoire de nom de dossier ?
Enfin si tout est converti c’est l’essentiel ...
merci pour le retour.