IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Applescript pour effacement fichiers
Options
fraiturep
posté 7 Nov 2016, 15:59
Message #1


Nouveau Membre


Groupe : Membres
Messages : 1
Inscrit : 7 Nov 2016
Membre no 200 242



Bonjour,

je suis en train de me battre avec un script pour effacer les fichiers plus vieux de 5 jours dans une zone nommée 5 days. Le but? Une zone temporaire partagée par tous les employés et chaque nuit ce script efface tous les fichiers et répertoires de plus de 5 jours. Franchement s'il y a des pros de l'Apple script, j’apprécierais beaucoup un petit coup de main.

Voici le script que j'ai écrit :

Il fonctionne en partie mais 2 problèmes se posent :
- Pas récursif (mais ça on peut peut-être scripter pour le rendre récursif, je ne l'ai pas encore fait parce que j'imagine bien après avoir tapé 100 lignes de code trouver que le get every file of folder a une bête option recursive...)
- La creation date n'est pas la date à laquelle le fichier a été écrit mais bien celle à laquelle il a été créé. Vous allez me me dire logique... Ben non, parce que j'ai remplacé dans le script creation date par modification date, même résultat. Je fais un copier coller d'un fichier de fonts dans test et le script efface le document comme s'il avait été créé ou modifié il y a plus que 5 jours.

on run
tell application "Finder"
try
if (list disks) does not contain "Share" then
mount volume "afp://192.x.x.x/Share" as user name "user" with password "password"
end if
on error
display dialog "Erreur de connexion" & return & return & ¬
"Réessayez plus tard" & return & return & ¬
"ou vérifiez que le serveur est branché " buttons {"Okay"} default button 1
end try
end tell
tell application "Finder"
set fiveDaysAgo to (get current date) - (5 * days)
delete (get every file of folder "Share:Test" whose creation date is less than fiveDaysAgo)
end tell
end run
Go to the top of the page
 
+Quote Post
PBell
posté 8 Nov 2016, 07:29
Message #2


Adepte de Macbidouille
*

Groupe : Membres
Messages : 185
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonjour,

Pour ce qui est de la récursivité, il suffit d'utiliser l'expression "entire content" qui va rechercher dans tous les sous dossiers:
CODE
tell application "Finder" to set MesFichiers to every file in entire contents of monDossier whose creation date is less than fiveDaysAgo


Attention toutefois à la performance car les appels au Finder son souvent un peu lent. Si l'appel se fait sur une dossier contenant quelques centaines de fichiers pas de soucis. Mais si le dossier parent contient 10 000 fichiers, cela sera lent.

Quant au second point sur les dates, tu peux retrouver la date de création et celle de modification: Ces 2 dates sont strictement liées au fichier.
Il n'y a pas de date d'insertion dans un dossier. Pour le dossier, il y a bien une date de modification mais elle ne te mène nulle part.
Si tu veux simuler la date d'insertion dans un dossier il te faut mettre en place d'autres mécanismes comme une base indiquant le fichier et la date d'ajout au dossier. Cela implique un script quotidien qui prend une "photo" du dossier, le compare à la photo d'hier et en déduit ce qui a été ajouté aujourd'hui.

Tu as plusieurs solutions pour mettre cela en place :
- launchd : méthode décrite par Apple pour lancer périodiquement des scripts. Le script devra lister les fichiers présents, en déduire ceux ajoutés depuis la dernière fois et enregistrer la date du jour avec les fichiers ajoutés.
- une action de dossier : à chaque fois qu'un fichier ou un sous dossier est ajouté au dossier à surveiller, le script se déclenche avec, en paramètre, la liste des fichiers ajoutés. Tu dois alors enregistrer le fichier ajouté avec sa date dans une liste/base de donnée.

Dans els 2 cas, tu dois ensuite écrire un script qui lit la base de données ainsi constituée et supprimer les plus fichiers de plus de 5 jours (du dossier, mais aussi de la base !).

La méthode action de dossier suppose que le dossier est en ligne quand tu ajoutes le fichier. Ce n'est peut être pas le cas sur ton serveur distant.

Bon courage.


--------------------
iMac 27 i7 2,8GHz 8Go/1To 10.6.8 /10.10 / 10.11
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 20th August 2019 - 11:50