Inverser noms de fichiers en applescript + critères, Inverser deux noms de fichiers s'ils ont une racine commune |
Bienvenue invité ( Connexion | Inscription )
Inverser noms de fichiers en applescript + critères, Inverser deux noms de fichiers s'ils ont une racine commune |
30 Aug 2016, 13:36
Message
#1
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
Bonjour,
J'ai beau avoir bénéficié d'une formation applescript il y a un an, j'ai du mal à m'y remettre et je sollicite votre aide sur ce sujet a priori simple : Je veux écrire un script qui scannera le contenu d'un dossier contenant des images et qui en inversera les noms quand une condition est remplie. Les images sont toutes nommées selon la structure suivante : T_12345_codecoul_RG_1_78999.jpg La racine "T_12345_codecoul_RG_" peut-être commune à plusieurs images du dossier. L'unicité du nom vient du reste de la chaine de caractère. RG_ me donne le numéro de l'image. par exemple RG_1 pour l'image n°1 d'un produit, RG_2 l'image n°2 etc.. ce que doit faire le script : quand il trouve une image n°2 et n°3 qui ont la même racine, il doit en permuter les noms intégralement. Naturellement le script ne parcours qu'une fois le dossier ! Exemple : Avant passage du script image A : T_12345_codecoul_RG_2_78999.jpg image B : T_12345_codecoul_RG_3_12121.jpg Après passage du script : image A : T_12345_codecoul_RG_3_12121.jpg image B : T_12345_codecoul_RG_2_78999.jpg Pouvez-vous m'aider ? merci beaucoup ! |
|
|
30 Aug 2016, 13:58
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 876 Inscrit : 23 Nov 2002 Membre no 4 808 |
pas compris
dans ton exemple, si "image A :" et "image B" n'appartiennent pas au nom du fichier, c'est juste l'ordre d'affichage qui est modifié, non ? -------------------- MBP 15 unibody (circa 2010) 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.5 (OpencoreLegacy Patcher 1,5) |
|
|
30 Aug 2016, 14:01
Message
#3
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 969 Inscrit : 26 Jan 2011 Lieu : Pollachius virens Membre no 164 083 |
Salut,
la racine "T_12345_codecoul_RG_" a toujours le même nombre de caractères ? -------------------- MBP 2017 15" avec clavier pourri et touchbar inutile
|
|
|
30 Aug 2016, 14:32
Message
#4
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 989 Inscrit : 22 Aug 2002 Lieu : 06220 VALLAURIS Membre no 3 217 |
Est-il possible de trouver plus de deux fichiers dotés de la même racine?
Si oui que fait-on ? Le principe est de faire : set nomA to name of image A set nomB to name of image B set name of image A to nomB & "@@@" # pour éviter de doublonner set name of image B to nomA set name of image A to nomB Y-a-t-il un risque d'avoir un ou plusieurs caractères / dans un nom ? Si oui il faut impérativement travailler avec le "Finder" que je déteste. Dans le cas contraire on peut travailler avec "System Events" ou avec le shell. Ce message a été modifié par KOENIG Yvan - 30 Aug 2016, 14:36. |
|
|
30 Aug 2016, 15:01
Message
#5
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
Bonjour,
Merci pour vos premiers retour. Quelques précisions : - Oui la structure de la racine est toujours la même, à savoir : une lettre underscore 8 chiffres underscore trois ou quatre chiffres underscore les lettres RG underscore 1 chiffre underscore 1 nombre unique à 6 chiffres Dans le dossier on peut trouver de 1 à 4 fichiers ayant la même racine se terminant par RG_1, RG_2, RG_3 et RG_4. On n'inversera les noms que des fichiers contenant RG_2 et RG_3. le principe qu'énonce KOENIG est exactement celui qu'il décrit. Enfin une précision je devrais faire tourner ce script sur des dossiers qui seront sur un serveur distant, pas en local sur mon mac... ça a peut-être uen importance ! merci |
|
|
30 Aug 2016, 18:31
Message
#6
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 265 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Bonsoir,
Si j'ai bien compris ta demande, le script ci-dessous y réponds. Je l'ai largement commenté pour que tu puisses l'adapter si j'ai mal compris une partie. CODE (* plusieurs cas sont possibles pour le même préfixe de type X_12345678_123_ - RG_1 existe seul, ou RG_1 et RG_2 -> on ne fait rien ! - RG_1, RG_2, RG_3 existent, avec ou sans RG_4 -> on interverti RG_2 et RG_3 Donc on commence donc par rechercher les RG_3 On vérifie ensuite l'existence d'un RG_2 de même préfixe et, si on le trouve, on permute les indices en gardant le préfixe et le suffixe Important : on suppose que tout les fichiers ont la même extension *) set monDossier to choose folder "sélectionner le dossier à traiter" set TDossier to monDossier as string tell application "Finder" set ListeRG3 to name of every item of folder monDossier whose name contains "RG_3" set AppleScript's text item delimiters to "RG_" repeat with NomRG3 in ListeRG3 -- boucle traiter tout les RG_3 set Prefixe to text item 1 of NomRG3 -- X_12345678_123_ set SuffixeRG3 to text item 2 of NomRG3 -- 3_12345.jpg set SuffixeRG3 to text 2 thru -1 of SuffixeRG3 -- supprime le "3" devant set RG2 to Prefixe & "RG_2" -- même début de nom que le RG_3, mais avec RG2 log "RG2 = " & RG2 set ListeRG2 to (name of every item of folder monDossier whose name contains RG2) if ListeRG2 is {} then -- ne rien faire, car RG_3 existe, mais pas RG_2 else -- RG_2 et RG_3 existent set NomRG2 to item 1 of ListeRG2 -- on suppose qu'il ne peut y avoir qu'un seul RG_2 ! set SuffixeRG2 to text item 2 of NomRG2 set SuffixeRG2 to text 2 thru -1 of SuffixeRG2 -- supprime le "2" devant log "noms=" & NomRG3 & return & NomRG2 log "prefixe = " & Prefixe log "suffixes = " & SuffixeRG2 & return & SuffixeRG3 set name of ((TDossier & NomRG3) as alias) to Prefixe & "RG_2" & SuffixeRG3 -- met RG3 avec l'indice RG_2 set name of ((TDossier & NomRG2) as alias) to Prefixe & "RG_3" & SuffixeRG2 -- met RG2 avec l'indice RG_3 end if end repeat end tell Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
31 Aug 2016, 07:47
Message
#7
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
Bonjour,
Merci je vais teste de suite ! Par contre c'est le nom complet qu'il faut permuter et pas seulement les indices 2 et 3. Je vais essayer de modifier le code. Si je ne m'en sors pas je vous recontacte. en tous cas merci beaucoup ! pour la réactivité et la qualité des réponses. |
|
|
31 Aug 2016, 08:12
Message
#8
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
RE !
Alors je viens de tester mais visiblement le script inverse les premiers RG_2 et RG_3 qu'il rencontre, alors qu'il doit le faire uniquement sur ceux qui ont le même préfixe. Sur la copie écran ci-joint il faudrait uniquement inverser les noms des fichiers en vert. Or il inverse avec celui qui est rouge. Je travaille votre code de mon côté mais vous y arrivez avant moi certainement Merci d'avance Ce message a été modifié par Speed Moock - 31 Aug 2016, 08:12.
Fichier(s) joint(s)
|
|
|
31 Aug 2016, 09:53
Message
#9
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
Y'a un problème. D'après ta copie d'écran, tu as plusieurs fichiers RG_3 qui commencent par le même préfixe:
G_37744390_378_RG_3_21234.jpg G_37744390_378_RG_3_45632.jpg Le script de PBell suppose qu'il ne peut y avoir qu'un seul couple (RG_2,RG_3) possédant le même préfixe. A quoi devrait correspondre G_37744390_378_RG_2_7890.jpg ? au premier ou au second RG_3 ? -------------------- késtananafout' (:
|
|
|
31 Aug 2016, 10:31
Message
#10
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
Bonjour,
En effet mon dossier n'est pas bon et il y a un doublon. Le second RG_3 est en trop dans mon dossier. Du coup le G_37744390_378_RG_2_7890.jpg doit correspondre au premier RG_3 Ci-dessous la bonne copie écran Merci
Fichier(s) joint(s)
|
|
|
31 Aug 2016, 10:40
Message
#11
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
Je pense qu'il faut passer par un nom de fichier intermédiaire lors du changement de nom.
Code set name of ((TDossier & NomRG3) as alias) to Prefixe & "RG_2" & SuffixeRG3 -- met RG3 avec l'indice RG_2 set name of ((TDossier & NomRG2) as alias) to Prefixe & "RG_3" & SuffixeRG2 -- met RG2 avec l'indice RG_3 La première ligne essaie de renommer RG3 en RG2, mais le fichier RG2 existe déjà. -------------------- késtananafout' (:
|
|
|
31 Aug 2016, 11:07
Message
#12
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
Merci Chombier, j'essaye right now
|
|
|
31 Aug 2016, 12:17
Message
#13
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 265 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Bonjour,
Effectivement, j'ai supposé que pour un préfixe donnée, il n'y avait qu'un seul RG_2 et un seul RG_3 dans le dossier. Il est possible de gérer en erreur les cas de doublons si tu estime cela nécessaire. Par contre, je ne comprends pas la nécessité de passer par un fichier intermédiaire. Je l'avais considéré dans une version provisoire du script, mais il m'est apparut que ce n'était pas nécessaire. Prenons un exemple (Speed Monck n'hésite pas à me corriger si j'ai mal compris) : On a 2 fichiers de même préfixe (=Prefixe1), d'indice 2 et 3 et de suffixes différents (Suffixe1 et Suffixe2) : - Fichier 1 : nom = Prefixe1_RG2_Suffixe1 - Fichier 2 : nom = Prefixe1_RG3_Suffixe2 Le script renomme d'abord le fichier 2 en : Prefixe1_RG2_Suffixe2 Comme ce nom a un suffixe différent de celui du fichier 1, pas besoin de nom intermédiaire Puis le script renomme le fichier 1 en : Prefixe1_RG3_Suffixe1. Résultat : - Fichier 1 : nom = Prefixe1_RG3_Suffixe1 - Fichier 2 : nom = Prefixe1_RG2_Suffixe2 En fait, il serait seulement nécessaire de passer via un nom temporaire si, et seulement si, il est possible que 2 fichiers de même préfixes aient aussi le même suffixe. est-ce possible ? Si c'est le cas, je changerai mon script. Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
31 Aug 2016, 12:20
Message
#14
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
Par contre, je ne comprends pas la nécessité de passer par un fichier intermédiaire. Je l'avais considéré dans une version provisoire du script, mais il m'est apparut que ce n'était pas nécessaire. En fait, je me suis basé sur son premier exemple pour voir un conflit de noms: Avant passage du script image A : T_12345_codecoul_RG_2_78999.jpg image B : T_12345_codecoul_RG_3_12121.jpg Après passage du script : image A : T_12345_codecoul_RG_3_12121.jpg image B : T_12345_codecoul_RG_2_78999.jpg Dans cet exemple, "image A" prend le nom "image B" et vice-versa. D'ailleurs, en relisant, il me semble qu'il ne faut pas inverser SuffixeRG2 et SuffixeRG3: Code set TmpNomRG3 to NomRG3 & ".tmp" set name of ((TDossier & NomRG3) as alias) to TmpNomRG3 set name of ((TDossier & NomRG2) as alias) to Prefixe & "RG_3" & SuffixeRG3 set name of ((TDossier & TmpNomRG3) as alias) to Prefixe & "RG_2" & SuffixeRG2 Ce message a été modifié par chombier - 31 Aug 2016, 12:28. -------------------- késtananafout' (:
|
|
|
31 Aug 2016, 12:34
Message
#15
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
Bonjour,
je viens de lire vos post et je pense que je me suis mal exprimé. Si on reprends l'exemple de PBell : - Fichier 1 : nom = Prefixe1_RG2_Suffixe1 - Fichier 2 : nom = Prefixe1_RG3_Suffixe2 Le résultat doit être : Fichier 1 : nom = Prefixe1_RG3_Suffixe2 Fichier 2 : nom = Prefixe1_RG2_Suffixe1 On échange intégralement les noms. Donc je pense qu'il peut y avoir un bug à la première écriture. D'où l'idée de passer par un nom tampon. Rappel : Les préfixes ne sont pas uniques Les suffixes le sont Un préfixe concaténé de RG2 ou RG3 devient unique. C'est à dire qu'il ne peut pas exister de Prefixe1_RG2_Suffixe1 et Prefixe1_RG2_Suffixe2 dans le même dossier. Merci |
|
|
31 Aug 2016, 12:45
Message
#16
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 265 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Nos posts se sont croisés. Chombier tu avais raison ! Speed Moock, voici donc le script corrigé qui passe par un nom temporaire : CODE set monDossier to choose folder "sélectionner le dossier à traiter" set TDossier to monDossier as string tell application "Finder" set ListeRG3 to name of every item of folder monDossier whose name contains "RG_3" set AppleScript's text item delimiters to "RG_" repeat with NomRG3 in ListeRG3 -- boucle traiter tout les RG_3 set Prefixe to text item 1 of NomRG3 -- X_12345678_123_ set SuffixeRG3 to text item 2 of NomRG3 -- 3_12345.jpg set SuffixeRG3 to text 2 thru -1 of SuffixeRG3 -- supprime le "3" devant set RG2 to Prefixe & "RG_2" -- même début de nom que le RG_3, mais avec RG2 set ListeRG2 to (name of every item of folder monDossier whose name contains RG2) if ListeRG2 is {} then -- ne rien faire, car RG_3 existe, mais pas RG_2 else -- RG_2 et RG_3 existent set NomRG2 to item 1 of ListeRG2 -- on suppose qu'il ne peut y avoir qu'un seul RG_2 ! set SuffixeRG2 to text item 2 of NomRG2 set SuffixeRG2 to text 2 thru -1 of SuffixeRG2 -- supprime le "2" devant set NomTemp to Prefixe & "Temp_" & SuffixeRG3 set name of ((TDossier & NomRG3) as alias) to NomTemp -- met RG3 avec nom temporaire set name of ((TDossier & NomRG2) as alias) to Prefixe & "RG_3" & SuffixeRG3 -- met RG2 avec l'indice RG_3 et le suffixe RG3 set name of ((TDossier & NomTemp) as alias) to Prefixe & "RG_2" & SuffixeRG2 -- met RG3 avec RG_2 et suffxe 2 end if end repeat end tell Cordialement Ce message a été modifié par PBell - 31 Aug 2016, 12:46. -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
31 Aug 2016, 12:49
Message
#17
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
Je viens de tester avec le bout de code proposé par Chombier. ça fonctionne à la première inversion puis le script continue avec les autres RG3 de sa liste et du coup retraite le RG2 qu'il vient de créer au premier passage.
Il faut en quelque sorte que le script teste que le RG2 qu'il vient de trouver à la même racine que le RG3 courant. sorry j'avais pas testé le nouveau code de Pbell. je le fais de suite merci |
|
|
31 Aug 2016, 12:50
Message
#18
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
Je viens de tester avec le bout de code proposé par Chombier. ça fonctionne à la première inversion puis le script continue avec les autres RG3 de sa liste et du coup retraite le RG2 qu'il vient de créer au premier passage. Il faut en quelque sorte que le script teste que le RG2 qu'il vient de trouver à la même racine que le RG3 courant. C'est bizarre: le script ne boucle que sur les fichiers commençant par RG3_, et en fait la liste au début du traitement... Si tu le lances deux fois, tu devrais retrouver le contenu original. -------------------- késtananafout' (:
|
|
|
31 Aug 2016, 13:02
Message
#19
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
J'ai le message d'erreur suivant
J'ai corrigé cette ligne : set ListeRG2 to (name of every item of folder monDossier whose name contains "RG_2") Et ça mAAAAArche !!! Merci beaucoup et une bière est offerte pour tout passage dans la bonne ville de Arras (62) !
Fichier(s) joint(s)
|
|
|
31 Aug 2016, 13:07
Message
#20
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
C'est sans doute les parenthèses dans:
Code set ListeRG2 to (name of every item of folder monDossier whose name contains RG2) Puisque la première liste avec ListeRG3 fonctionne...J'ai le message d'erreur suivant J'ai corrigé cette ligne : set ListeRG2 to (name of every item of folder monDossier whose name contains "RG_2") Et ça mAAAAArche !!! Merci beaucoup et une bière est offerte pour tout passage dans la bonne ville de Arras (62) ! Euh... non, ça marche pas. Le premier fichier RG2 trouvé dans la liste sera associé au premier fichier RG3, quelque soit le préfixe, tu vas tout niquer... -------------------- késtananafout' (:
|
|
|
31 Aug 2016, 13:13
Message
#21
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 265 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Je suis dubitatif sur ta dernière correction.
QUOTE set ListeRG2 to (name of every item of folder monDossier whose name contains "RG_2") En effet, cette ligne, maintenant corrigée va lister tous les fichiers contenant "RG_2" alors que à ce stade du script, on ne veut trouver que les fichiers contenant le même préfixe (que le RG_3 en cours de traitement) suivi de RG2. Par exemple si je traite le fichier T_123456_RG_3_xxxxxxx. le dossier contient les fichiers T_123456_RG_2_yyyyy et T1111111_RG_2_zzzzzzz Avec la ligne originale, la recherche ne trouvera que le fichier T_123456_RG_2_yyyyy Avec la ligne telle que tu l'as modifiée, la recherche trouvera tous les fichier contenant "RG_2" donc les 2 fichiers T_123456_RG_2_yyyyy et T1111111_RG_2_zzzzzzz Cordialement PS : as tu lu mon script corrigé avec les remarques de Chombier ? -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
31 Aug 2016, 13:34
Message
#22
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
Ok, je pense avoir compris.
Il y a une erreur -1728 provoquée là dedans: Code set ListeRG2 to (name of every item of folder monDossier whose name contains RG2) L'erreur -1728 chez Apple:Citation -1728: The referenced object doesn’t exist. This is a run-time resolution error, such as when attempting to reference a third object when only two objects exist. Ce qui pourrait vouloir dire que tu as des fichiers RG_3 sans fichier RG_2 associé, et que ça fait planter cette ligne de code. Peut-être en ajoutant des exceptions autour ? Et sinon, elles servent à quoi les parenthèses de set ListeRG2 to () qui ne sont pas présentes dans set ListeRG3 ? -------------------- késtananafout' (:
|
|
|
31 Aug 2016, 13:45
Message
#23
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 265 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Effectivement, si pas de RG2 ça plante.
Il faut remplacer cette ligne par ces 4 lignes : CODE set ListeRG2 to {} try set ListeRG2 to (name of every item of folder monDossier whose name contains RG2) end try Si aucun fichier RG2 n'existe avec le préfixe voulu, alors le test if qui suit fera sauter au prochain fichier RG_3 du dossier. Cordialement PS : on peut effacer les () effectivement..pourquoi les ai-je mis ici et pas de RG3....une étourderie ! Ce message a été modifié par PBell - 31 Aug 2016, 13:46. -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
31 Aug 2016, 15:17
Message
#24
|
|
Adepte de Macbidouille Groupe : Membres Messages : 174 Inscrit : 15 Mar 2008 Lieu : Lorraine Membre no 110 156 |
Bonjour,
Pour éviter le plantage si pas de RG2 il suffit de vérifier s'il existe. On obtient le code: Code set monDossier to choose folder "sélectionner le dossier à traiter"
set TDossier to monDossier as string tell application "Finder" set ListeRG3 to name of every item of folder monDossier whose name contains "RG_3" set AppleScript's text item delimiters to "RG_" repeat with NomRG3 in ListeRG3 -- boucle traiter tout les RG_3 set Prefixe to text item 1 of NomRG3 -- X_12345678_123_ set SuffixeRG3 to text item 2 of NomRG3 -- 3_12345.jpg set SuffixeRG3 to text 2 thru -1 of SuffixeRG3 -- supprime le "3" devant set RG2 to Prefixe & "RG_2" -- même début de nom que le RG_3, mais avec RG2 if exists (every file of monDossier whose name contains RG2) then -- verifie si un fichier avec prefixe & RG_2 existe set nomRG2 to (name of every item of folder monDossier whose name contains RG2) set name of ((TDossier & NomRG3) as alias) to "NomTemp" -- met RG3 avec nom temporaire set name of ((TDossier & nomRG2) as alias) to NomRG3 -- met RG2 avec l'indice RG_3 et le suffixe RG3 set name of ((TDossier & "NomTemp") as alias) to nomRG2 -- met RG3 avec RG_2 et suffxe 2 end if end repeat end tell -------------------- Imac 27 I7 Fusion drive fin 2013 Ram 8Go Mac OS X (10.14.6)
MacBook Pro 15 pouces mi-2012 8Go Ram Mac OS X (10.14.6) Imac 24 M3 2023 Ram 24Go macOS Sonoma 14.3 |
|
|
31 Aug 2016, 17:16
Message
#25
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 265 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Effectivement Zeltron, on peut utiliser la function "exists" mais dans ce cas, le résultat de name of every file... est une liste et pas un nom, d'où une erreur de type lors de l'execution.
Pour éviter cette erreur, il faut changer l'extraction du suffixe2 en : "set SuffixeRG2 to text item 2 of (item 1 of nomRG2)" C'est à dire en prenant l'item 1 de la liste NomRG2. Malgré cette correction, ta suggestion simplifie le code : CODE set monDossier to choose folder "sélectionner le dossier à traiter" set TDossier to monDossier as string tell application "Finder" set ListeRG3 to name of every item of folder monDossier whose name contains "RG_3" set AppleScript's text item delimiters to "RG_" repeat with NomRG3 in ListeRG3 -- boucle traiter tout les RG_3 set Prefixe to text item 1 of NomRG3 -- X_12345678_123_ set SuffixeRG3 to text item 2 of NomRG3 -- 3_12345.jpg set SuffixeRG3 to text 2 thru -1 of SuffixeRG3 -- supprime le "3" devant set RG2 to Prefixe & "RG_2" -- même début de nom que le RG_3, mais avec RG2 if exists (every file of monDossier whose name contains RG2) then -- verifie si un fichier avec prefixe & RG_2 existe set nomRG2 to (name of every item of folder monDossier whose name contains RG2) set SuffixeRG2 to text item 2 of (item 1 of nomRG2) set SuffixeRG2 to text 2 thru -1 of SuffixeRG2 -- supprime le "2" devant set NomTemp to Prefixe & "Temp_" & SuffixeRG3 set name of ((TDossier & NomRG3) as alias) to NomTemp -- met RG3 avec nom temporaire set name of ((TDossier & nomRG2) as alias) to Prefixe & "RG_3" & SuffixeRG3 -- met RG2 avec l'indice RG_3 et le suffixe RG3 set name of ((TDossier & NomTemp) as alias) to Prefixe & "RG_2" & SuffixeRG2 -- met RG3 avec RG_2 et suffxe 2 end if end repeat end tell Merci ! -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
31 Aug 2016, 17:29
Message
#26
|
|
Adepte de Macbidouille Groupe : Membres Messages : 174 Inscrit : 15 Mar 2008 Lieu : Lorraine Membre no 110 156 |
Le test "exists" ne sert qu'a savoir si je récupère le nom complet du fichier dans NomRG2
Pourquoi t'embêter à extraire les suffixes et reconstruire les noms ? Tu les as tout prêt (les noms) dans tes variables NomRG2 et NomRG3, c'est pourquoi ensuite je fais les 3 changements avec ces variables ! J'ai tester mon code (TON code juste modifié par moi) pas d'erreur... Plus qu'a attendre le verdict de "Speed Moock" Félicitation pour ton code ! -------------------- Imac 27 I7 Fusion drive fin 2013 Ram 8Go Mac OS X (10.14.6)
MacBook Pro 15 pouces mi-2012 8Go Ram Mac OS X (10.14.6) Imac 24 M3 2023 Ram 24Go macOS Sonoma 14.3 |
|
|
31 Aug 2016, 20:52
Message
#27
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
Je suis plus en faveur du try ... end try.
L'exécution sera plus rapide que de lister deux fois le même contenu du dossier, surtout si c'est sur un volume distant. D'ailleurs, il vaudrait mieux créer une seconde liste avant la boucle. [edit] Speed Moock n'est pas revenu. J'espère qu'il n'a pas niqué ses fichiers originaux en utilisant son script modifié, croyant que ça marchait... [/edit] Ce message a été modifié par chombier - 31 Aug 2016, 20:54. -------------------- késtananafout' (:
|
|
|
31 Aug 2016, 21:10
Message
#28
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 265 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
@Chombier,
Le côté négatif de faire une seconde liste avant la boucle est que le script devra ensuite chercher dans cette seconde liste si un item avec le même préfixe correspond. Cela se fera via une boucle dans le script sur les items de cette seconde liste.... Pas sûr que l'on gagne en vitesse par rapport à un get every item whose name contains "xxx". Cependant, tu as raison de vouloir accélérer dans le cas d'un dossier sur un serveur lent (ou réseau lent). Dans ce cas, je suggère un "do shell script" avec instruction "find ". "find" sera beaucoup plus rapide : c'est même ce que je connais de plus rapide ! Mais il faut précéder cela d'une transformation de chemin via POSIX (chemin Finder en chemin Unix) encaspsulé dans un "quoted form of " pour éviter les espaces et autres caractère qui pourraient exister vers le dossier. Ensuite, il faudra reprendre le résultat du do shell script pour séparer le chemin du nom du fichier, avec peut être aussi des conversion de caractères spéciaux ...Bref, au total, va-t-on y gagner beaucoup ? Qu'en pensez vous ? On va surement y perdre en simplicité. Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
31 Aug 2016, 22:02
Message
#29
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
A tester. Je pense que parcourir une liste déjà en mémoire est beaucoup plus rapide que de déclencher une recherche dans des dossiers pour chaque RG_3.
Code set monDossier to choose folder "sélectionner le dossier à traiter"
set TDossier to monDossier as string tell application "Finder" set ListeRG3 to name of every item of folder monDossier whose name contains "RG_3" set ListeRG2 to name of every item of folder monDossier whose name contains "RG_2" set AppleScript's text item delimiters to "RG_" repeat with NomRG3 in ListeRG3 -- boucle traiter tout les RG_3 set Prefixe to text item 1 of NomRG3 -- X_12345678_123_ set RG2 to Prefixe & "RG_2" -- même début de nom que le RG_3, mais avec RG2 repeat with i from 1 to count ListeRG2 if ListeRG2's item i contains RG2 then set NomRG2 to ListeRG2's item i set NomTemp to Prefixe & ".tmp" set name of ((TDossier & NomRG3) as alias) to NomTemp set name of ((TDossier & NomRG2) as alias) to NomRG3 set name of ((TDossier & NomTemp) as alias) to NomRG2 exit repeat end if end repeat end repeat end tell -------------------- késtananafout' (:
|
|
|
1 Sep 2016, 00:05
Message
#30
|
|
Adepte de Macbidouille Groupe : Membres Messages : 42 Inscrit : 30 Aug 2016 Membre no 199 619 |
Bonsoir à tous !
Bon alors je n'ai pas encore mis en prod le script que je pensais avoir modifié correctement (bouh l'apprenti sorcier que je fais) donc pas de dégât pour le moment. Effectivement je peux avoir des RG_3 dans mon dossier et qui n'ont pas de RG_2... Du coup j'ai testé le code de Chombier et il fonctionne. Je teste demain sur un serveur distant pour voire la rapidité. En tout cas merci encore à tous. Ce message a été modifié par Speed Moock - 1 Sep 2016, 00:18. |
|
|
Nous sommes le : 14th June 2024 - 13:48 |