iCalFilter est né du constat qu'il n'existait pas (comprendre : je n'ai pas trouvé) d'outil en ligne de commande pour manipuler les fichiers iCalendar (format standard de calendriers). Leur structure interne (suite d'enregistrements multilignes non-ordonnée) rend impossible (ou difficile) l'usage des outils unix traditionnels.
Voilà pourquoi j'ai écrit iCalFilter (aujourd'hui disponible en version 0.1, tadaam !), en python, et sous GPL3+.
iCalFilter propose donc des fonctions proches d'outils unix traditionnels, mais adaptés au format iCalendar, ainsi que des possibilités sympatiques de formattage de la sortie : au lieu de fournir en sortie un fichier iCalendar, il peut produire une vue calendaire colorée dans la console (et bientôt en HTML, postscript, etc.).
En deuxième partie de la dépêche, quelques exemples de commandes possibles. Voir aussi la documentation pour quelque chose de plus exhaustif, ou la page d'exemples de scripts (pour publier des infos de temps libre/occupé, supprimer des vieux événements d'un calendrier, afficher une vue calendaire des événements du jour ou de la semaine...)
Quelques exemples
Recherche (à la grep)
iCalFilter peut ne garder que les événements d'un (ou de plusieurs) calendriers qui correspondent à un motif donné (ici, qui possèdent un champ « lieux ») :
icalfilter '/LOCATION/' entree1.ics entree2.ics > sortie.ics
De même, il peut ne garder que les champs de chaque événement correspondant à un motif (en utilisant l'option « f » pour field, ici uniquement les champs de date de début, de date de fin, et d'intitulé) :
icalfilter '/DTSTART|DTEND|SUMMARY/f' < entree.ics > sortie.ics
Vu que l'on travaille sur des calendriers, iCalFilter peut faire des recherches par date absolue (ici on garde tous les évènements supérieurs au 10 octobre 2010) :
icalfilter '/>2010-10-10/' entree.ics -o sortie.ics
ou relative (tous les évènements de la semaine prochaine) :
cat entree.ics | icalfilter '/=+1w/' -o sortie.ics
Supressions (à la grep -v)
Pour supprimer les évènements ou les champs qui correspondent à un motif, il suffit de préfixer les commandes précédentes par « d » (delete). Par exemple pour supprimer tout événement plus vieux qu'un mois :
icalfilter 'd/<-1m/' entree.ics > sortie.ics
Remplacement (à la sed s///)
iCalFilter permet aussi de faire des remplacement de valeurs dans des champs correspondant à un motif donné. Exemple pour annonymiser les intitulé des événements :
icalfilter 's/SUMMARY/unknown/' entree.ics > sortie.ics
Et d'autres
On peut chaîner les commandes (avec des « ; »), dérouler des événements récurrents, faire des scripts... Il faut lire la documentation pour tout savoir !
Aller plus loin
- Télécharger iCalFilter (199 clics)
- Documentation de base (186 clics)
- Exemples de scripts (235 clics)
# Il me semble qu'il manque les commandes dans les examples
Posté par reno . Évalué à 4.
Il me semble qu'il manque les commandes dans les examples donc je pense qu'il faut remplacer
"icalfilter '/LOCATION/' entree1.ics entree2.ics > sortie.ics" par "icalfilter '/LOCATION/g' entree1.ics entree2.ics > sortie.ics" (pas sûr: ça peut être le comportement par défaut)
"icalfilter '/DTSTART|DTEND|SUMMARY/' < entree.ics > sortie.ics" par "icalfilter '/DTSTART|DTEND|SUMMARY/f' < entree.ics > sortie.ics"
[^] # Re: Il me semble qu'il manque les commandes dans les examples
Posté par Florence Birée (site web personnel) . Évalué à 2.
Pour le premier, le flag « g » est en effet le comportement par défaut.
Il y a par contre effectivement une erreur pour le deuxième, il manque bien le flag « f » !
(On ne dirait que je ne peux pas éditer la dépêche. En tout cas, pas trouvé. Un modérateur, peut-être ?)
[^] # Re: Il me semble qu'il manque les commandes dans les examples
Posté par Bruno Michel (site web personnel) . Évalué à 2.
Oui, c'est fait.
[^] # Re: Il me semble qu'il manque les commandes dans les examples
Posté par Florence Birée (site web personnel) . Évalué à 1.
Merci !
# Trés bon !
Posté par Graveen . Évalué à 2.
Merci, cet outil est excellent :)
# Commentaire supprimé
Posté par Anonyme . Évalué à 3.
Ce commentaire a été supprimé par l’équipe de modération.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.