# Automator: créer un dossier X s'il n'existe pas



## kapik (29 Août 2010)

Bonsoir à tous !

Je suis en train d'essayer de faire ceci :

- Un fichier apparait dans le dossier "Téléchargement"
- Est ce que le dossier portant la date du jour (ex: 29-08-2010) existe ? 
     - Si non: il faut le créer
     - Si oui: ne rien faire
- Déplacer les fichiers créer à la date du jour dans ce dossier



Combinant le shell, je sais quasiment faire chaque élément du script.
Mais je ne parviens pas à les mettre bout à bout...

Comment mettre une condition à la création du dossier ?
Dans automator peut on passer des étapes?

Des idées pour ce script ?

Merci d'avance pour votre aide


----------



## Anonyme (29 Août 2010)

Bonsoir,

La commande "mkdir -p" crée le dossier sil n'existe pas sinon il ne fait rien.
	
	



```
cd ~/Downloads;d=$(/bin/date "+%d-%m-%Y"); /bin/mkdir -p "$d";"
```

Tu ne peux pas passer des étapes dans Automator


----------



## kapik (29 Août 2010)

Ha oui je n'avais pas pensé à utiliser ça !

Par contre j'ai un soucis.

Donc dès que quelque chose apparait dans Téléchargement ça lance le processus: 

- Création du dossier "Date" si il n'existe pas.
- Je recherche les éléments dont la date de création est égale au jour courant.
- Je les déplace dans le dossier créé.

Problème : lors de ma recherche j'obtient évidemment le dossier créé !

Comment gérer cela ?
Il est possible d'ignorer un nom de dossier lors de la recherche mais impossible de faire intervenir une variable...

Comme mon processus se lance quand un élément arrive dans le dossier, il peut pas savoir "tout seul" quel est cet élément ? Et de ce fait le déplacer directement ?


----------



## Anonyme (29 Août 2010)

Bonjour,

Deux solutions :

*1&#8212;* Le plus simple : créer le dossier dans un sous dossier existant.
Désactive les actions de dossier, crée un dossier "*sousdownload*", active les actions de dossier.

La commande sera comme ceci

```
cd ~/Downloads/sousdownload;d=$(/bin/date "+%d-%m-%Y"); /bin/mkdir -p "$d";"
```

*2 &#8212;* Editer le script AppleScript crée par Automator (il est dans le dossier "/Maison/Bibliothèque/Scripts/Folder Action Scripts/") pour filtrer le dossier daté.


Voici un exemple 
	
	



```
on adding folder items to this_folder after receiving added_items
	set endName to do shell script "/bin/date \"+-%m-%Y:\""
	set aList to {}
	repeat with i in added_items
		if (i as string) does not end with endName then set end of aList to (contents of i)
	end repeat
	
	tell application "monactiondedossier" -- application fait par Automator
		open aList
	end tell
end adding folder items to
```


----------



## kapik (29 Août 2010)

Merci pour tes solutions mais je n'ai pas compris la première !

Par contre pour la seconde, n'est il pas possible de faire un script applescript plutot que d'aller le modifier comme ça ?


----------



## ceslinstinct (29 Août 2010)

kapik a dit:


> Merci pour tes solutions mais je n'ai pas compris la première !



La réponse que je donnais, j'ai des doutes sur ça pertinence, je préfère l'annuler car je pense pas avoir bien compris ta question.

@+


----------



## Anonyme (30 Août 2010)

Bonjour,

Maintenant que j'y pense, les solutions du *message #4* ne sont pas valides, puisqu'on ne sait rien d'autre que la création du dossier.

Donc, il faudrait connaître tous les détails :
Est-ce une action de dossier ? 
Sinon c'est quoi qui lance ce processus ?

Quels sont les noms des actions dans *Automator* ?
Et les détails sur  chaque action  (case coché ou non, le contenu des champs et des popup.

Et le but de cet automatisme ?

Aussi ta configuration (version de l'*OS* et ta machine) ?


----------



## kapik (30 Août 2010)

Heu... "Lol ? " j'ai envie de dire..;




			
				Kapik a dit:
			
		

> - Un fichier apparait dans le dossier "Téléchargement"
> - Est ce que le dossier portant la date du jour (ex: 29-08-2010) existe ?
> - Si non: il faut le créer
> - Si oui: ne rien faire
> - Déplacer les fichiers créer à la date du jour dans ce dossier


----------



## Anonyme (30 Août 2010)

kapik a dit:


> Heu... "Lol ? " j'ai envie de dire..;


Ok 

La solution est de déplacer les fichiers (*données en entrée*) et non de déplacer les fichiers créés à la date du jour, avec une des deux solutions dans le message #4

Si vous ne comprenez pas les solutions que je vous ai données, je laisse les experts de MacGeneration vous l'expliquer ou de vous proposer d'autres solutions.


----------



## kapik (30 Août 2010)

Exactement ! C'est ça qui faut faire.
Mais je ne sais pas déplacer le fichier qui est en entrée !


----------



## ceslinstinct (30 Août 2010)

kapik a dit:


> Exactement ! C'est ça qui faut faire.
> Mais je ne sais pas déplacer le fichier qui est en entrée !


Bonjour

J'ai une action de dossier que je me suis faite en septembre 2007 et que j'utilise tous les jours sans problème (ce que tu demande n'est qu'un extrait de mon code).

Ce que fait l'action de dossier:

Un déplacement des Fichiers et Dossiers ainsi que des alias (et non les originaux des alias) vont êtres déplacés dans un dossier nommé du jour de leurs déplacement.

Gestion des doublons par un ajout d'un nombre entre crochets en fin de nom (pour garder les noms originaux si plusieurs noms identiques (un élément déplacé peut avoir le même nom qu'un sauvegardé avant sans être identique)).
Les nombres entre crochets indique le nombre de doublons par nom et non le nombre total de doublons.

La deuxième ligne est facile à supprimer, c'est juste pour savoir si c'est exactement ce genre d'action de dossier que tu recherche.

Si oui, alors je vais tester avec Snow Léopard.

@+


----------



## kapik (30 Août 2010)

Sans prendre en compte les alias, oui c'est quasiment ça !


----------



## ceslinstinct (30 Août 2010)

kapik a dit:


> Sans prendre en compte les alias, oui c'est quasiment ça !



Bonsoir

Les alias tu n'est pas obligé de les utiliser, mais ce sont des fichiers eux aussi.

Modifie le chemin où doit se trouver tes dossiers datés (sur cet exemple dans ta petite maison)


```
-- 
-- © Légal Jean Louis Ecrit le 26 Septembre 2007 (dernière modification le 20 Octobre 2007)
-- Un extrait d'un de mes codes
-- Version 1 Testé avec Snow Léopard aussi sans problème

on adding folder items to Dossier after receiving ces_fichiers
	set dossierDate to (do shell script "date +\"%d-%m-%G\"") as string
	set ce_dossier to (path to "cusr" as string)
	set cheminDate to ce_dossier & dossierDate & ":"
	
	tell application "Finder"
		-- Si changement de jour, nouveau dossier daté
		tell (folder ce_dossier) to if not (exists folder dossierDate) then make new folder at it with properties {name:dossierDate}
		
		-- Déplacement du contenu du dossier vers le dossier daté du jour
		repeat with fichier in ces_fichiers
			set {nom, t_Kind, Ex} to {name, kind, name extension} of fichier
			
			tell (item nom in folder cheminDate) to if exists then set name to my modif(nom, t_Kind, Ex, cheminDate as Unicode text)
			move fichier to folder cheminDate
		end repeat
		
	end tell
	
	if memErreur &#8800; {} then display dialog memErreur
end adding folder items to

-- \\\ GESTION DES DOUBLONS SI NÉCESSAIRE  /// --
-- La numérotation se fait sur les noms des doublons et non sur le nombre de doublons
on modif(nom, t_Kind, Ex, t_folder)
	set {nbr, lesNoms} to {1, list folder t_folder}
	
	if t_Kind is in {"folder", "Dossier"} or Ex is in {"", missing value} then -- Dossiers ou Fichiers sans extensions
		set {debut, fin} to {nom & "[", "]"}
	else -- Fichiers avec extensions
		set {debut, fin} to {text 1 thru -((count Ex) + 2) of nom & "[", "]." & Ex}
	end if
	
	repeat while (debut & nbr & fin) is in lesNoms
		set nbr to nbr + 1
	end repeat
	return debut & nbr & fin
end modif
-- ---------------------- FIN DU CODE ----------------------
```

Comme tu ne répond pas à la question posé sur l'OS que tu utilise, essais de voir si ça marche chez toi.

Donne une réponse si ça marche chez toi, ça peu intéresser d'autres lecteurs si tu donne une réponse positive.

Bon test

JL


----------

