Comment restaurer des événements disparus dans un calendrier iCal ou BusyCal grâce à TimeMachine ?
Bonjour,
J'ai été confronté dernièrement à de mystérieuses disparitions dans mes calendriers sur Mac OSX. J'utilise l'application BusyCal qui me permet de partager mes calendriers avec mon épouse, avec ma tablette Android,... Par malheur, BusyCal ne supporte pas Time Machine, du moins pas en direct car cette application fonctionne grâce à une base de données. Par contre, pour rester compatible avec iCal, tous les événements sont dupliqués dans iCal. C'est là que nous allons intervenir.
Attention, j'ai testé et validé cette procédure sur Snow Leopard. Malgré tout, cela reste un peu sensible comme travail, donc, faites très attention à ce que vous faites.
Pré-requis: l'utilisation de Time Machine est bien entendu nécessaire, une connaissance de l'utilisation de la ligne de commande est un atout non-négligeable.
Etape 1: Déterminer où sont stockés les fichiers iCal.
Ouvrez le menu "Aller" du Finder et sélectionnez "Départ". Allez ensuite dans le dossier "Bibliothèque" puis dans "Calendars".
Si vous n'utilisez qu'un seul calendrier, ce sera facile puisqu'il n'y aura normalement qu'un seul dossier avec un nom bizarre mais se terminant par ".calendar"
Si, par contre, vous avez comme moi, plusieurs calendriers, ce sera moins facile. Dans chaque dossier, on trouve un fichier Info.plist. Dans ce fichier sont contenues toutes les informations relatives à un de nos calendriers. En les ouvrant un à un, on peut trouvez assez facilement le calendrier pour lequel nous voulons restaurer des rendez-vous. Mais, avec 15 ou 20 calendriers, ça devient vite long, très long...
Je vous propose donc une "formule magique" qui va nous permettre de trouver dans quel dossier se trouve notre calendrier.
Ouvrez l'application "Terminal". Elle se trouve dans le dossier "Utilitaires" qui, lui-même, se trouve dans le dossier "Applications".
Attention, à partir de ce point, une certaine connaissance du Shell Scripting est un plus non négligeable !
Les lignes de mes captures d'écran qui commencent par "MacBook-Pro" sont celles qui donnent les commandes. Il ne faut taper que ce qui suit le symbole $. Par exemple, dans la capture ci-dessous, il ne faut taper que
Les lignes suivantes sont en général le résultat de la commande tapée.
Prenez note dans BusyCal ou dans iCal, du nom de votre agenda. Dans mon exemple, je vais utiliser le calendrier "Moi". Et voici une seconde formule magique:
Grâce à elle, je sais que mon agenda "Moi" est stocké dans le dossier "B067B0EE-5B92-4BCF-BB7B-5B22B79CCF08.calendar". On ne peut pas dire qu'ils aient fait simple...
Si je retourne dans mon Finder, je peux maintenant aller dans ce fameux dossier:
On voit qu'il existe un dossier "Events". C'est dans ce dossier que sont stockés tous les rendez-vous, sous forme de fichiers ics:
Etape 2: Restaurer les rendez-vous manquants.
En théorie, il s'agit là de la partie la plus simple. En activant Time Machine, vous allez pouvoir "remonter" dans le temps pour essayer de retrouver vos fichiers. Vous pouvez profitez dans Time Machine de la fonction Coup D'oeil qui vous aidera à identifier le rendez-vous manquant. Une fois que c'est fait, vous faites un "ctrl-click" avec votre souris (ou un click-droit, ou un click à deux doigts, suivant vos paramètres personnels...) et vous pouvez choisir dans le menu l'option Restaurer "monfichierperdu" vers...
Vous aller pouvoir choisir un endroit où restaurer ce fichier. Je vous conseille de le restaurer sur votre bureau. Lorsque c'est fait, quittez Time Machine. Allez sur votre bureau et double-cliquez sur le fichier ics qui s'y trouve. Le système va peut-être vous demander avec quel logiciel vous désirez ouvrir ce fichier: soit iCal, soit BusyCal. Choisissez le programme que vous utilisez normalement. L'importation va également probablement demander dans quel calendrier ce rendez-vous doit être ajouté. Sélectionnez-le dans la liste déroulante, cliquez sur OK.
Et voilà, c'est fait ! Le Rendez-Vous manquant est revenu. Maintenant, vous pouvez recommencer pour les autres rendez-vous qui manqueraient.
Etape 2bis: Restaurer des rendez-vous disparus en masse...
Hé oui, ça peut arriver... Mais attention, cette section est réservée à des utilisateurs avertis du terminal !
Imaginons, vous avez 1 calendrier dont vous suspectez que plusieurs rendez-vous ont été effacés par erreur. Ou bien, autre cas de figure, vous avez plusieurs centaines de rendez-vous dans votre calendrier... Une recherche telle que faite à l'étape 2 serait extrêmement longue et frustrante.
Dans ce cas précis, je propose de ne pas s'amuser à chercher tous les fichiers un par un. Il sera plus rapide de restaurer le dossier "Events" en complet et de faire la recherche au travers d'une commande assez poussée dans le terminal.
Pour pouvoir restaurer tout le dossier "Events", il faut lancer Time Machine en ayant sélectionné le dossier de l'agenda:
Dans Time Machine, cliquez sur Events, et regarder dans la barre du bas, vous verrez combien de fichiers sont présents dans le dossier. Reculez petit à petit dans le temps et regardez toujours ce compteur. Par contre, c'est bien sur le dossier "Events" qu'il faudra faire le "CTRL+Click"et plus sur les fichiers ics !!! A nouveau, je vous conseille de faire la restauration sur le Bureau.
Attention, c'est ici que les choses se compliquent vraiment...
Commencez par créer un dossier que nous appellerons Restore sur notre bureau. Ensuite, dans le terminal, tapez les lignes suivantes. Attention, chaque ligne se termine par l'appui sur la touche Entrée...
Petite explication "Dafalgan"...
for event in *.ics : on prend la liste de tous les fichiers .ics
do: on leur applique le traitement qui suit
if ( ! [ ..... ] ): si le fichier ne trouve pas aussi dans le dossier de l'agenda utilisé par iCal/Busycal
then cp -v $event ../Restore/ : on en fait une copie dans le dossier Restore qui est sur le bureau.
fi et done: fin du traitement...
Avec ceci, j'ai extrait 2 fichiers qui étaient présent dans le backup mais pas dans les données actuelles de mon agenda. A la base, mon agenda contenait une centaine de rendez-vous...
Il suffit ensuite d'utiliser "Coup d'oeil" sur les fichiers dans le dossier Restore et d'injecter celui/ceux que nous voulons vraiment récupérer.
Epilogue
Grâce à cette méthode, héritée de mon passé d'utilisateur Linux, j'ai pu assez rapidement récupérer des rendez-vous effacés par mégarde. Ce n'est pas à la portée de tous. Je suis persuadé qu'il est possible d'arriver à ce résultat en utilisant les outils Mac, mais je ne les connais pas assez actuellement pour le faire.
J'espère que cet article pourra aider certaines personnes rencontrant des difficultés semblables.
N'hésitez pas à poser des questions en commentaire. J'essayerai d'y répondre le plus vite possible.
A bientôt !
J'ai été confronté dernièrement à de mystérieuses disparitions dans mes calendriers sur Mac OSX. J'utilise l'application BusyCal qui me permet de partager mes calendriers avec mon épouse, avec ma tablette Android,... Par malheur, BusyCal ne supporte pas Time Machine, du moins pas en direct car cette application fonctionne grâce à une base de données. Par contre, pour rester compatible avec iCal, tous les événements sont dupliqués dans iCal. C'est là que nous allons intervenir.
Attention, j'ai testé et validé cette procédure sur Snow Leopard. Malgré tout, cela reste un peu sensible comme travail, donc, faites très attention à ce que vous faites.
Pré-requis: l'utilisation de Time Machine est bien entendu nécessaire, une connaissance de l'utilisation de la ligne de commande est un atout non-négligeable.
Etape 1: Déterminer où sont stockés les fichiers iCal.
Ouvrez le menu "Aller" du Finder et sélectionnez "Départ". Allez ensuite dans le dossier "Bibliothèque" puis dans "Calendars".
Si vous n'utilisez qu'un seul calendrier, ce sera facile puisqu'il n'y aura normalement qu'un seul dossier avec un nom bizarre mais se terminant par ".calendar"
Si, par contre, vous avez comme moi, plusieurs calendriers, ce sera moins facile. Dans chaque dossier, on trouve un fichier Info.plist. Dans ce fichier sont contenues toutes les informations relatives à un de nos calendriers. En les ouvrant un à un, on peut trouvez assez facilement le calendrier pour lequel nous voulons restaurer des rendez-vous. Mais, avec 15 ou 20 calendriers, ça devient vite long, très long...
Je vous propose donc une "formule magique" qui va nous permettre de trouver dans quel dossier se trouve notre calendrier.
Ouvrez l'application "Terminal". Elle se trouve dans le dossier "Utilitaires" qui, lui-même, se trouve dans le dossier "Applications".
Attention, à partir de ce point, une certaine connaissance du Shell Scripting est un plus non négligeable !
Les lignes de mes captures d'écran qui commencent par "MacBook-Pro" sont celles qui donnent les commandes. Il ne faut taper que ce qui suit le symbole $. Par exemple, dans la capture ci-dessous, il ne faut taper que
cd Library/Calendars/
Les lignes suivantes sont en général le résultat de la commande tapée.
Prenez note dans BusyCal ou dans iCal, du nom de votre agenda. Dans mon exemple, je vais utiliser le calendrier "Moi". Et voici une seconde formule magique:
Grâce à elle, je sais que mon agenda "Moi" est stocké dans le dossier "B067B0EE-5B92-4BCF-BB7B-5B22B79CCF08.calendar". On ne peut pas dire qu'ils aient fait simple...
Si je retourne dans mon Finder, je peux maintenant aller dans ce fameux dossier:
On voit qu'il existe un dossier "Events". C'est dans ce dossier que sont stockés tous les rendez-vous, sous forme de fichiers ics:
Etape 2: Restaurer les rendez-vous manquants.
En théorie, il s'agit là de la partie la plus simple. En activant Time Machine, vous allez pouvoir "remonter" dans le temps pour essayer de retrouver vos fichiers. Vous pouvez profitez dans Time Machine de la fonction Coup D'oeil qui vous aidera à identifier le rendez-vous manquant. Une fois que c'est fait, vous faites un "ctrl-click" avec votre souris (ou un click-droit, ou un click à deux doigts, suivant vos paramètres personnels...) et vous pouvez choisir dans le menu l'option Restaurer "monfichierperdu" vers...
Vous aller pouvoir choisir un endroit où restaurer ce fichier. Je vous conseille de le restaurer sur votre bureau. Lorsque c'est fait, quittez Time Machine. Allez sur votre bureau et double-cliquez sur le fichier ics qui s'y trouve. Le système va peut-être vous demander avec quel logiciel vous désirez ouvrir ce fichier: soit iCal, soit BusyCal. Choisissez le programme que vous utilisez normalement. L'importation va également probablement demander dans quel calendrier ce rendez-vous doit être ajouté. Sélectionnez-le dans la liste déroulante, cliquez sur OK.
Et voilà, c'est fait ! Le Rendez-Vous manquant est revenu. Maintenant, vous pouvez recommencer pour les autres rendez-vous qui manqueraient.
Etape 2bis: Restaurer des rendez-vous disparus en masse...
Hé oui, ça peut arriver... Mais attention, cette section est réservée à des utilisateurs avertis du terminal !
Imaginons, vous avez 1 calendrier dont vous suspectez que plusieurs rendez-vous ont été effacés par erreur. Ou bien, autre cas de figure, vous avez plusieurs centaines de rendez-vous dans votre calendrier... Une recherche telle que faite à l'étape 2 serait extrêmement longue et frustrante.
Dans ce cas précis, je propose de ne pas s'amuser à chercher tous les fichiers un par un. Il sera plus rapide de restaurer le dossier "Events" en complet et de faire la recherche au travers d'une commande assez poussée dans le terminal.
Pour pouvoir restaurer tout le dossier "Events", il faut lancer Time Machine en ayant sélectionné le dossier de l'agenda:
Dans Time Machine, cliquez sur Events, et regarder dans la barre du bas, vous verrez combien de fichiers sont présents dans le dossier. Reculez petit à petit dans le temps et regardez toujours ce compteur. Par contre, c'est bien sur le dossier "Events" qu'il faudra faire le "CTRL+Click"et plus sur les fichiers ics !!! A nouveau, je vous conseille de faire la restauration sur le Bureau.
Attention, c'est ici que les choses se compliquent vraiment...
Commencez par créer un dossier que nous appellerons Restore sur notre bureau. Ensuite, dans le terminal, tapez les lignes suivantes. Attention, chaque ligne se termine par l'appui sur la touche Entrée...
cdDans mon cas, cela a donné ceci :
cd Desktop/Events
for event in *.ics
do
if ( ! [ -f ../../Library/Calendars/LE_NOM_IMPOSSIBLE_DU_DOSSIER.calendar/Events/$event ] )
then
cp -v $event ../Restore/
fi
done
Petite explication "Dafalgan"...
for event in *.ics : on prend la liste de tous les fichiers .ics
do: on leur applique le traitement qui suit
if ( ! [ ..... ] ): si le fichier ne trouve pas aussi dans le dossier de l'agenda utilisé par iCal/Busycal
then cp -v $event ../Restore/ : on en fait une copie dans le dossier Restore qui est sur le bureau.
fi et done: fin du traitement...
Avec ceci, j'ai extrait 2 fichiers qui étaient présent dans le backup mais pas dans les données actuelles de mon agenda. A la base, mon agenda contenait une centaine de rendez-vous...
Il suffit ensuite d'utiliser "Coup d'oeil" sur les fichiers dans le dossier Restore et d'injecter celui/ceux que nous voulons vraiment récupérer.
Epilogue
Grâce à cette méthode, héritée de mon passé d'utilisateur Linux, j'ai pu assez rapidement récupérer des rendez-vous effacés par mégarde. Ce n'est pas à la portée de tous. Je suis persuadé qu'il est possible d'arriver à ce résultat en utilisant les outils Mac, mais je ne les connais pas assez actuellement pour le faire.
J'espère que cet article pourra aider certaines personnes rencontrant des difficultés semblables.
N'hésitez pas à poser des questions en commentaire. J'essayerai d'y répondre le plus vite possible.
A bientôt !
Commentaires