Synchroniser automatiquement Radicale et Nextcloud avec un script Bash
Radicale et Nextcloud sont deux solutions populaires pour gérer ses calendriers.
-
Radicale est un serveur CalDAV léger, idéal pour héberger ses agendas en local ou sur un petit serveur.
-
Nextcloud est une plateforme cloud complète qui intègre entre autres la gestion des calendriers via CalDAV.
Dans certains cas, on souhaite synchroniser automatiquement les fichiers .ics
de Radicale vers Nextcloud : par exemple pour bénéficier de l’interface web conviviale de Nextcloud tout en continuant à utiliser Radicale comme serveur principal.
Cet article présente un script Bash qui automatise cette synchronisation et explique comment le mettre en place.
1. Le principe
Le script a pour objectif de :
-
Lister les fichiers
.ics
présents dans Radicale pour un utilisateur donné. -
Comparer avec le contenu déjà présent dans Nextcloud via WebDAV.
-
Supprimer côté Nextcloud les fichiers qui n’existent plus côté Radicale.
-
Uploader (mettre à jour ou ajouter) les fichiers
.ics
de Radicale vers Nextcloud.
Résultat : les calendriers de Nextcloud deviennent une copie fidèle des calendriers Radicale, mis à jour automatiquement chaque nuit (ou selon la planification définie dans cron
).
2. Le script Bash
Voici le script complet :
#!/bin/bash
# === À PERSONNALISER ===
# Répertoire racine des calendriers Radicale
RADICALE_ROOT="/srv/Files/Radicale/data/collections/collection-root/user/"
# Ton utilisateur Nextcloud
NEXTCLOUD_USER="user"
# Ton mot de passe ou token d'application Nextcloud
NEXTCLOUD_PASS="TOKEN"
# Hôte Nextcloud (ex: cloud.exemple.com)
NEXTCLOUD_HOST="cloud.exemple.com"
# Liste des calendriers à synchroniser (Radicale|Nextcloud)
CALENDARS=(
"cal1|cal-1"
"cal2|cal-2"
"cal3|cal-3"
"cal4|cal-4"
"cal5|cal-5"
)
# =========================
for calendar in "${CALENDARS[@]}"; do
RADICAL_NAME="${calendar%%|*}"
NEXTCLOUD_NAME="${calendar##*|}"
echo "Synchronisation du calendrier : $RADICAL_NAME --> $NEXTCLOUD_NAME"
RADICAL_CAL_DIR="$RADICALE_ROOT/$RADICAL_NAME"
NEXTCLOUD_URL="https://$NEXTCLOUD_HOST/remote.php/dav/calendars/$NEXTCLOUD_USER/$NEXTCLOUD_NAME"
if [[ ! -d "$RADICAL_CAL_DIR" ]]; then
echo "Dossier introuvable : $RADICAL_CAL_DIR — Ignore."
continue
fi
# Liste des fichiers locaux
declare -A local_files
for ics_file in "$RADICAL_CAL_DIR"/*.ics; do
if [[ -f "$ics_file" ]]; then
file_name=$(basename "$ics_file")
local_files["$file_name"]=1
fi
done
# Récupération des fichiers distants
echo "Recuperation des fichiers existants depuis Nextcloud..."
remote_files=$(curl -s -u "$NEXTCLOUD_USER:$NEXTCLOUD_PASS" -X PROPFIND \
-H "Depth: 1" "$NEXTCLOUD_URL" | grep -oP '(?<=<d:href>).*?\.ics(?=</d:href>)' | sed 's|.*/||')
for remote_file in $remote_files; do
if [[ -z "${local_files[$remote_file]}" ]]; then
echo "Suppression distante : $remote_file"
curl -s -u "$NEXTCLOUD_USER:$NEXTCLOUD_PASS" -X DELETE \
"$NEXTCLOUD_URL/$remote_file" \
|| echo "Erreur lors de la suppression de $remote_file"
fi
done
# Upload des fichiers locaux
for ics_file in "$RADICAL_CAL_DIR"/*.ics; do
if [[ -f "$ics_file" ]]; then
FILE_NAME=$(basename "$ics_file")
echo "Upload : $FILE_NAME"
curl -s -X PUT -u "$NEXTCLOUD_USER:$NEXTCLOUD_PASS" \
-T "$ics_file" \
"$NEXTCLOUD_URL/$FILE_NAME" \
|| echo "Erreur lors de l'envoi de $FILE_NAME"
fi
done
echo "Termine pour $RADICAL_NAME"
echo ""
done
echo "Synchronisation complete."
3. Pré-requis
Avant de lancer ce script, il faut :
-
Avoir un serveur Radicale fonctionnel avec des calendriers stockés dans un répertoire
.ics
. -
Avoir un compte Nextcloud avec la gestion des calendriers activée.
-
Créer un token d’application dans Nextcloud (plutôt que d’utiliser directement son mot de passe).
-
Installer curl sur le système qui exécutera le script.
4. Configuration du script
Les variables principales à personnaliser sont :
-
RADICALE_ROOT
: chemin vers le répertoire où Radicale stocke les.ics
. -
NEXTCLOUD_USER
etNEXTCLOUD_PASS
: ton utilisateur Nextcloud et son mot de passe (ou mieux : un token d’application). -
NEXTCLOUD_HOST
: ton domaine Nextcloud (par ex.cloud.exemple.com
). -
CALENDARS
: la correspondance entre les noms des calendriers Radicale et Nextcloud ("Nom_Radicale|Nom_Nextcloud"
).
5. Automatiser avec cron
Pour exécuter la synchronisation chaque nuit à 3h du matin, ajoute cette ligne à la crontab (crontab -e
) :
0 3 * * * /bin/bash /home/Radicale_to_Nextcloud/radicale_to_nextcloud.sh
Ainsi, tes calendriers Radicale seront automatiquement poussés vers Nextcloud sans intervention manuelle.
6. Avantages et limites
✅ Avantages :
-
Pas besoin de configurer une double synchro CalDAV.
-
Nextcloud reçoit une copie exacte des fichiers
.ics
de Radicale. -
Automatisation complète grâce à
cron
.
⚠️ Limites :
-
C’est une synchronisation unidirectionnelle (Radicale → Nextcloud). Toute modification faite directement dans Nextcloud sera écrasée.
-
Le script ne gère pas les conflits de modification.
Conclusion
Ce script Bash est une solution simple et efficace pour synchroniser automatiquement ses calendriers Radicale vers Nextcloud. En planifiant son exécution via cron
, tu bénéficies de la puissance de Radicale et de l’ergonomie de Nextcloud, sans avoir à gérer les manipulations manuelles de fichiers .ics
.
No comments to display
No comments to display