Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Technologies Apple _ Applescript pour effacement fichiers

Écrit par : fraiturep 7 Nov 2016, 15:59

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

Écrit par : PBell 8 Nov 2016, 07:29

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.

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)