applescript pour backups

Publié : 29.04.2007 - 20h59 par jacques v

[size=18]AutoSave : AppleScript pour sauvegardes automatiques des documents RagTime[/size]

je demande de l'aide à un connaisseur d'applescript pour améliorer le script décrit ci-dessous et donné à la fin

je ne sais pas si ma demande est réaliste, en tout cas ça dépasse mes compétences
_________________

Ce script sauvegarde automatiquement et à intervalle régulier le document RagTime en cours de saisie (celui dont la fenêtre est au premier plan dans RT), dans le dossier spécifié. Les sauvegardes antérieures sont conservées jusqu'à concurrence du nombre spécifié.

RT_AutoSave 6FR(v074)

Historique et Description

AppleScript de yann auger, d'après ole saalmann, projet jacques villars

2005-03-30 ole saalmann (ole@saalmann.de), script original
2006-11-25 complété et adapté par yann auger selon des suggestions de jacques villars

Ce script sauvegarde automatiquement et à intervalle régulier le document RagTime en cours de saisie (celui dont la fenêtre est au premier plan dans RT), dans le dossier spécifié.

Le script d'ole saalmann effectuait une copie de sécurité (.RTBak), du fichier en cours d'édition, dans le dossier temporaire ("Macintosh HD:Temporary Items") ; chaque copie était écrasée par la suivante ; on pouvait définir l'intervalle de temps entre chaque copie, et le laps de temps de conservation des copies dans le dossier temporaire.

jacques villars a suggéré que le script effectue des copies de sauvegardes successives avec un numéro d'incrémentation; le nombre total de copies conservées est défini par l'utilisateur ; avec ce complément, le script pallie partiellement l'absence d'annulations multiples dans RagTime.

thomas kaegi a suggéré un dialogue de confirmation de sauvegarde.

jacques villars étant à peu près nul en applescript ;-) , ole saalman étant très occupé à d'autres tâches, yann auger a bien voulu compléter le script et le mettre au point; il a de plus implémenté la récupération automatique du chemin vers le dossier de sauvegarde dans le dossier "maison".

Mode de fonctionnement

Le dossier destiné à recevoir les sauvegardes doit exister, RT_AutoSave ne le crée pas. RT_Autosave se charge du nom complet du dossier de destination à partir du dossier "maison".

Ce script sauvegarde, automatiquement et à intervalle régulier, le document RagTime en cours de saisie (celui dont la fenêtre est au premier plan dans RT), dans le dossier spécifié :
- il enregistre une copie du document dans le dossier défini par 'mySaveFolder', qui DOIT EXISTER dans le dossier de l'utilisateur : la "Maison" (Ex: mySaveFolder = «RT_AutoSaved» ou «Documents:Sauvegardes Automatiques de RagTime») ;
- il raccourcit le nom du document (RT n'appréciant par des noms de plus de 32 caractères !) /!\ cela peut créer des similitudes de noms ;
- il ajoute l'extension ".RTBak" afin d'éviter toute confusion sur la nature du document ;
- il sauvegarde plusieurs copies, états successifs du document, en ajoutant un numéro qui s'incrémente automatiquement, jusqu'au nombre maximal fixé dans le script ; puis la série repart de 01 /!\ s'il y a plusieurs documents différents, il ne fait pas de distinction quant au document sauvegardé lors du décompte des état successifs ; dans le dossier de sauvegarde, afficher par liste triée par date de modification pour s'y retrouver ;
- passé un délai défini, il écrase les anciennes sauvegardes existantes…

Ce script peut être utilisé comme application :
Il suffit de le lancer et la sauvegarde automatique est opérationnelle.

Il peut aussi être appelé à intervalle régulier par "cron".
Pour cela, ajouter le texte suivant dans votre "crontab" :
* * * * * /usr/bin/osascript /Applications/RT_AutoSave_6FR(v073fr).app > /dev/null 2> /dev/null
Sans oublier de mettre RT_AutoSave_6FR(v073fr).app dans le dossier adéquat !

Installation et utilisation

Déposer le script sur l'icône de l'éditeur de scripts : la fenêtre d'édition du script s'ouvre ; éditer les variables à sa convenance (voir ci-dessous).

Enregistrer le script dans un dossier à sa convenance (par exemple Applications)

Lancer le script, les sauvegardes commencent si RagTime est en travail.

Les variables sont rassemblées en début de script, les éditer à sa convenance :

* DelayInSeconde -- délai entre 2 sauvegardes, en secondes
* mySaveFolder -- emplacement des copies de sauvegarde : dossier qui doit préexister dans la "maison" de l'utilisateur
* NbIncrement -- nombre de sauvegardes successives conservées -- de 1 à 99
* DeleteAfterNbDay -- délai au delà duquel les copies de sauvegarde doivent être supprimées, en jours

yann auger et jacques villars, novembre 2006

ma demande d'amélioration

en tant que tel ce script fonctionne parfaitement

mais à l'usage il présente un sérieux inconvénient :

les sauvegardes successives encombrent le registre des Documents récemments utilisés et le rendent inutilisable.

comme amélioration j'imagine la solution suivante : il faudrait que le script travaille non seulement dans RagTime, mais aussi dans le Finder :

1. le script ferait un backup du document, toujours sous le même nom, dans un dossier de contenu provisoire RT_AutoSaved_Temp (fonctionnement dans RagTime)

2. le script incrémenterait le nom du backup du dossier provisoire et le déplacerait dans le dossier RT_AutoSaved, où on peut le récupérer (fonctionnement dans le Finder)

comme RT, pendant l'exécution du script, sauvegarde le backup toujours sous le même nom, le registre des documents récemments utilisés ne pointerait que vers le dossier à contenu provisoire, qui ne contiendrait qu'un seul fichier, et ignorerait les backups antérieurs qui sont dans le dossier RT_AutoSaved

à la main ça fonctionne comme je l'entends ; il n'y plus qu'à scripter tout ça...


le script

-- Ici commence le programme
-- Les variables sont rassemblées en début de script, les éditer à sa convenance
-- Pour utiliser le script avec RagTime 5, éditer si nécessaire le nom dans le script là où c'est signalé (1 seul endroit, NOM DU RT) ; en général cette adaptation se fait toutefois automatiquement
-- Pour l'ouverture d'une boîte de dialogue de confirmation de sauvegarde, enlever les deux tirets -- là où c'est signalé (ci-dessous, DIALOGUE DE CONFIRMATION)
**********************************************************************************)

-- DÉFINITION DES VARIABLES UTILISATEUR --

-- Dans "cron", le délai entre 2 sauvegardes automatiques n'est pas à définir (environ 1 minute)…
-- Mais il doit l'être en cas d'utilisation du script comme une application ; à modifier à votre convenance :
property DelayInSeconde : 30 -- en secondes

-- Emplacement des copies de sauvegarde, soit un dossier dans la "maison" de l'utilisateur
property mySaveFolder : "RT_AutoSaved" -- dossier qui doit exister au préalable

-- Nombre d'incrément de sauvegarde : à éditer
property NbIncrement : 240 -- de 1 à 999 (car codé sur 3 caractères : 001, 002 etc)

-- Délai au delà duquel les copies de sauvegarde doivent être supprimées : à éditer
property DeleteAfterNbDay : 7 -- délai en jours


-- INITIALISATION DES VARIABLES (ne rien modifier ici) --

property CountIncrement : 1 -- initialise le compteur d'incrément de sauvegarde à 1

property TheSaveFolder : "" -- qui deviendra le nom complet sur le modèle : "DD:Users:Ma_Maison:'mySaveFolder':"

tell application "Finder"
set TheSaveFolder to (home as string) & mySaveFolder & ":" -- concatène 'home' avec le dossier défini par l'utilisateur (et le ':' final)
end tell


-- EXÉCUTION DE LA SAUVEGARDE --
on makeBackup()
tell application "Finder"
set runningApps to the name of every process
if "RagTime" is in runningApps then -- Si RagTime est en service…
tell application "RagTime 6" -- Mettre ici le NOM DU RT concerné : "RagTime 5", RagTime 6"…

---- DIALOGUE DE CONFIRMATION de la sauvegarde : supprimer les "--" au début de la ligne suivante pour activer la confirmation :

-- display dialog "RT_AutoSave ?" buttons {"Annuler", "OK"} default button 2

try
-- récupère le nom du document au premier plan dans RT
set nametemp to name of document 1
-- la portion qui suit réduit la longueur du nom du document…
set theLength to (length of nametemp) --évalue le nb de caractères de 'nametemp'
if theLength > 25 then -- RT n'accepte pas les nom trop long !
copy ((characters 1 thru 25 of nametemp) as string) to theShortName
copy theShortName to nametemp
end if
-- fin de la portion "réductrice"
-- créé le numéro de la sauvegarde pour le nom de celle-ci
set srtIncrement to CountIncrement as string
if CountIncrement < 10 then -- ajoute un "0" aux nombres inférieurs à 10
set srtIncrement to "0" & srtIncrement
end if
if CountIncrement <100> NbIncrement then
set CountIncrement to 1
end if
end try
end tell
end if
end tell

-- Cette partie efface les anciennes sauvegardes (.RTbak)
try
set myWildcard to "*.RTBak"
set myScript to "find \"" & POSIX path of TheSaveFolder & "\" -type f -name \"" & myWildcard & "\" -mtime +" & DeleteAfterNbDay & " -exec rm {} \\;"
do shell script myScript
end try

end makeBackup

-- SI LE SCRIPT EST APPLELÉ PAR "CRON" (à intervalle régulier) --
makeBackup()

-- SI LE SCRIPT EST UTILISÉ COMME UNE APPLICATION --
on idle -- idle : boucle à l'infini…
makeBackup()
return DelayInSeconde -- …qui sera ré-exécutée après le délai passé en valeur de retour
end idle

-- FIN --

_____________________

jacques


Publié : 01.05.2007 - 17h22 par Okapi

Tu peux essayer de demander à Tom25, c'est sa spécialité ce genre de scripts, il m'a bien aidé pour mes images à sauvegarder.


Publié : 01.05.2007 - 17h50 par jacques v

merci beaucoup

je prends note si on ne s'en sort pas

entre temps yann a repris les choses en main, nous allons voir ce que ça donne

donc pas de panique pour l'instant

je redemanderai du secours si besoin est

sinon je donnerai ici la nouvelle solution

jacques


Publié : 01.05.2007 - 21h38 par jacques v

je crois qu'on a une solution, ça a l'air de marcher

jacques


Publié : 03.05.2007 - 13h40 par Tom25

Je n'ai pas RagTime :( , alors ça me serait difficile.

De plus je suis actuellement sur un script qui permet de sauvegarder dans un fichier texte la taille d'une fenêtre et sa position. Ce script mémorise également la position des icônes contenues, et il "descend" dans les sous dossiers de manière récursive. Puis il restaure tout ça à la demande depuis le fichier Texte sauvegardé. Ca m'a été demandé par email par une personne en .ch (Suisse ?, je viens seulement de lui demander :) ).
Ca n'a rien à voir avec le sujet initial mais si ça intéresse : page de Mémo Pos Icônes. (je ne voulais pas créer un post pour ça).

Je n'ai pas RagTime mais si vous bloquez sur un truc, demandez toujours des fois que j'ai déjà eu un problème similaire.


Publié : 03.05.2007 - 18h17 par jacques v

je ferai signe au besoin

merci beaucoup

jacques

ps

et je regarderai dans les scripts que tu proposes, ça a l'air intéressant