script "déplacer des éléments d'un dossier..."

  • Créateur du sujet Créateur du sujet chdud
  • Date de début Date de début

chdud

Membre actif
30 Juin 2004
557
1
61
Grenoble
Bonjour, j'essaye de faire un applescript pour déplacer les éléments (en ".pps") d'un dossier vers un autre dossier et je bute sur l'ouverture de ces fichiers et sur le terme à utiliser pour "déplacer" ces fichiers vers un autre dossier (déjà crée). Merci.
 
Essaie de les copier (avec remplacement des doublons), puis de supprimer les originaux
 
dictionnaire de finder :
move?v : Move object(s) to a new location
move reference : the object(s) to move
to location reference : the new location for the object(s)
[replacing boolean] : Specifies whether or not to replace items in the destination that have the same name as items being moved
[positioned at list] : Gives a list (in local window coordinates) of positions for the destination items
[routing suppressed boolean] : Specifies whether or not to autoroute items (default is false). Only applies when moving to the system folder.
? reference : to the object(s) after they have been moved


donc ya bien une commande toute prete! ;-)
 
Oui, effectivement, j'ai bien vu cette commande dans le dictionnaire du finder mais je ne vois pas trop comment l'appliquer. Il faut suivre les "consignes"? J'avaoue ne pas trop savoir comment me servir de ce dictionnaire.
 
Bloc de code:
tell application "Finder" 
 move file "Mon Fichier" ¬ 
  to folder "Mon Dossier" ¬ 
  replacing conflicts 
end tell

où Mon Fichier et Mon Dossier sont des chemins complets. (ie comme suit :
Bloc de code:
"Disque:DossierSource:Fichier"
)



PS : Bien sur si la copie change de volume, il y aura bien une simple copie, et il faudra détruire l'original par la suite.
 
mmmm
un truc du genre peut etre (pas testé, pas l'éditeur sous la main donc probablement qq coquilles)

Bloc de code:
tell application "Finder"
	set liste_des_fichiers to {""}
	set doss_A to choose folder with prompt "Dossier de départ :"
	set doss_B to choose folder with prompt "Dossier de destination :"
	set liste_des_fichiers to items of doss_A
	repeat with fichier in liste_des_fichiers as item
		if class of fichier is document file then
			set ext to the name extension of fichier
			if ext = "pps" then
				move file fichier to folder doss_B replacing conflicts
			end if
		end if
	end repeat
end tell

et voila ca devrait etre bon!!

tiens tant qu'a faire on pourrait complèter par un menu de choix pour l'extension plutot que se limiter au pps

++

EDIT : les coquilles sont corrigées donc je pense que ca doit tt bien marcher en théorie!! :-)
 
il existe une autre solution c'est d'interfacer des commandes bash via applescript (do shellscript )
ca te permet une meilleur gestion de se genre de manipulation
entre autre de vérifier l'intégralité des données

en effet ouvrir un task sur la commande find te permet de trouver rapidement
les fichiers à copier ainsi que leurs droits
ca te permet en cas de probleme de droits de lancer l'auth panel et de faire un mv des fichiers
avec les bons droits puis de verifier la copie avec un checksum

ca t'économise aussi des 10ene de lignes d'applescript

find /usr/lib -name "*dylib"
find /usr/lib -name "*dylib" -type f

la seule execption c'est de traiter les finder alias coter applescript si tu veux les suivres

et de refaire un find dans le target de l'alias finder


résultats : simplifie le code, le temps de l'op et le cpu
 
Zeusviper a dit:
mmmm
un truc du genre peut etre (pas testé, pas l'éditeur sous la main donc probablement qq coquilles)

Bloc de code:
tell application "Finder"
	set liste_des_fichiers to {""}
	set doss_A to choose folder with prompt "Dossier de départ :"
	set doss_B to choose folder with prompt "Dossier de destination :"
	set liste_des_fichiers to items of doss_A
	repeat with fichier in liste_des_fichiers as item
		if class of fichier is document file then
			set ext to the name extension of fichier
			if ext = "pps" then
				move file fichier to folder doss_B replacing conflicts
			end if
		end if
	end repeat
end tell

et voila ca devrait etre bon!!

tiens tant qu'a faire on pourrait complèter par un menu de choix pour l'extension plutot que se limiter au pps

++

EDIT : les coquilles sont corrigées donc je pense que ca doit tt bien marcher en théorie!! :-)
Bonjour et merci de ta réponse. Je me pose encore pas mal de questions. "doss_A" est donc le dossier à partir duquel je veux retirer les pièces jointes et "doss_B" celui où je veux amener ces pièces jointes. Ce dossier sur mon ordi est intitulé "pps" et il n'y en a qu'un. Mais s'il y avait plusieurs dossier "pps" comment ferais-je? Marquer le chemin pour aller à ce dossier? De même pour le dossier "départ"? Quant aux significations diverses, que veulent elles dire? "with prompt", "replacing conflicts". A la deuxième ligne, que dois-je mettre entre les accolades?
Je suis loin de toucher ma bille mais suis très interessé par applescript et applescript studio. Toutes ces réponse vont m'aider à résoudre ces problèmes et peut-être aussi aider certaines personnes à en résoudre.
 
tatouille a dit:
il existe une autre solution c'est d'interfacer des commandes bash via applescript (do shellscript )
ca te permet une meilleur gestion de se genre de manipulation
entre autre de vérifier l'intégralité des données

en effet ouvrir un task sur la commande find te permet de trouver rapidement
les fichiers à copier ainsi que leurs droits
ca te permet en cas de probleme de droits de lancer l'auth panel et de faire un mv des fichiers
avec les bons droits puis de verifier la copie avec un checksum

ca t'économise aussi des 10ene de lignes d'applescript

find /usr/lib -name "*dylib"
find /usr/lib -name "*dylib" -type f

la seule execption c'est de traiter les finder alias coter applescript si tu veux les suivres

et de refaire un find dans le target de l'alias finder


résultats : simplifie le code, le temps de l'op et le cpu
Bonjour, ta solution est peut-être la meilleure mais là, j'avoue que dans les termes, je suis complètement paumé! Par exemple "interfacer des commandes bash via applescript (do shellscript )" ou "ouvrir un task sur la commande find" ou "checksum". Dois-je traduire " find /usr/lib -name "*dylib" " par "find/users/library -name "*pps" ". Si tu peux apporter des réponses à un mec qui débute tout juste dans applescript ou applescript studio, c'est avec joie. D'ailleurs, est qu'avec applescript studio c'est plus simple? Je pense qu'il faut bien connaitre applescript pour s'attaquer à applescript studio, non? Merci de ta réponse.
 
chdud a dit:
Bonjour et merci de ta réponse. Je me pose encore pas mal de questions. "doss_A" est donc le dossier à partir duquel je veux retirer les pièces jointes et "doss_B" celui où je veux amener ces pièces jointes. Ce dossier sur mon ordi est intitulé "pps" et il n'y en a qu'un. Mais s'il y avait plusieurs dossier "pps" comment ferais-je? Marquer le chemin pour aller à ce dossier? De même pour le dossier "départ"?
Euhhh la je comprends pas vraiment ton pb.. tu ne peux pas avoir 2 dossiers de meme nom dans un endroit donné.. tu donnes des chemins complets en principe donc le dossier est parfaitement ciblé.


chdud a dit:
Quant aux significations diverses, que veulent elles dire? "with prompt", "replacing conflicts". A la deuxième ligne, que dois-je mettre entre les accolades?
with prompt signifie que tu va avoir une boite de dialogue te demandant de choisir ton dossier en question, ainsi tu peux le redéfinir comme tu le souhaites a chaque lancement de l'appli.

replacing conflict gere le conflit ou un fichier de meme nom serait deja présent dans le dossier destination, il sera alors automatiquement remplacé.

et a la 2eme ligne tu ne dois rien ajouter. ca ne sert qu'a initialiser la liste de fichiers ds le cas ou le dossier source serait vide ou inexistant, juste pour éviter les comportements erratiques quoi!

le script tel qu'il est est totalement fonctionnel, tu ne dois rien y modifier, tu le copie colle dans l'éditeur et tu le fais tourner et hop tu admire!


chdud a dit:
Je suis loin de toucher ma bille mais suis très interessé par applescript et applescript studio. Toutes ces réponse vont m'aider à résoudre ces problèmes et peut-être aussi aider certaines personnes à en résoudre.
Je pense qu'il faudrait que tu t'interesse d'abord aux bases d'applescript.. regarder des tutoriels de débutant et lire les aides dispo sur le site d'apple. (tu trouvera tout les liens adéquats en recherchant sur le forum!)

mais accesoirement applescript présente un intéret de plus en plus limité. il est de moins en moins conseillé et utilisé... le terminal et les script shell explosent carrément applescript sur des traitements comme celui que tu veux faire. donc tu peux regarder comment faire des script shell!
et ce qui est trés interessant est de prendre des scripts tout fait, ceux rendus dispo par apple par ex, cf dossier Bibliothèque/Scripts/ par ex, et de regarder comment il marchent, de les modifier et voir a quoi correspondent chaque commande et voili!

sinon pas mal de trucs interessant sur la prog mac en general qui pourraient t'aider ici : http://www.projectomega.org/


voila!!
A++
 
Il parle d'interfacer, et donc de mélanger du shell script avec du apple script. d'ou utiliser l'instruction doshell script en effet. mais dans ton cas tu n'as meme pas besoin de ca. il parlait de ca pour gérer les alias qui ne sont pas reconnus idrectement par le shell c tt.

la commande find est une commande du shell.
tu va dans le terminal, tape "man find" et tu sauras tt bien comment elle marche.

tu devrais en arriver a la conclusion que la commande adéquate pour ce que tu veux faire sera du genre :
find chemin_de_ton_dossier -name "*pps"

sinon oui je pense qu'il est assez impensable de s'attaquer a applescriptstudio sans maitriser des bases de programmation et de scripting. surtout qu'il va falloir comprendre le focntionnement d'xcode. je te renvoie a nouveau vers le site projetomega qui devrait bien t'aider!!

++
 
Bonsoir, j'ai bien essayé ton script et il plante en l'exécutant en me disant "la variable conflict n'est pas définie". Je comprend effectivement mieux le cheminement de ton script et je le trouve très interessant. Je vais suivre tes conseils et aller fouiner un peu plus du côté des scripts shell, s'ils sont plus efficaces et plus ciblés sur ce genre de manip. J'ai acheté 2 bouquins aussi pour m'aider à me repérer dans ce langage. Je pense que ça passe par beaucoup de temps aussi passé à essayer de démonter et comprendre ces scripts "tout fait". Merci encore.
 
chdud a dit:
Bonsoir, j'ai bien essayé ton script et il plante en l'exécutant en me disant "la variable conflict n'est pas définie".

bizarre.. le script compile et fonctionne parfaitement chez moi (os X.4)
tu n'aurait pas oublié le s à conflicts ??

Sinon ben tu peux utiliser "replacing existing items" (remplacement des éléments existants similaires), ou "replacing" (remplacement), ou "replacing true" (d'accord pour le remplacement) aussi bien que "replacing conflicts" (remplacement en cas de conflit de nom) sans changer le sens du script.

voili!
bon courage pour le shell!
++
 
bon, je viens d'essayer avec toutes les possibilités avec "s" sans "s" avec true, etc, rien à faire... C'est bizarre, je suis sous 10.4.5 Je vais re essayer. En tous cas, le site "projectomega" est vraiment pas mal.