How to copy calendars from one service to another? In this case from sogo (which is still open source but now paid for releases) to nextcloud. As source I use the sogo postgres database and copy the calendar entries using cadaver as webdav client to nextclouds webdav interface.
For caldav login create a ~/.netrc file.
machine nextcloud.domain.net login nextcloud_user password nextcloud_password
Choose calenders to be migrated.
select c_path2, c_foldername, c_location, c_folder_type from sogo_folder_info order by c_folder_type, c_path2;
Add all calendars which should be migrated to the calendars variable. Deleted entries will be skipped.
#!/bin/bash
declare -A calendars=(["sogo_source_calendar_db_table"]="nextcloud_username/nextcloud_destination_calendar")
src_db=sogo
dest_url=https://nextcloud.domain.net/remote.php/dav/calendars
# for contacts use: dest_url=https://nextcloud.domain.net/remote.php/dav/addressbooks/users
for cal in "${!calendars[@]}" ; do
src=$cal
dest=${calendars[$cal]}
echo "Export table $src"
count=`sudo -u postgres psql -d sogo -t -A -c "select count(c_content) from $src where c_deleted is null"`
echo "No of items to export: $count"
mkdir -p $dest
cd $dest
rm *
for((i=0;i<$count;i++)); do
sudo -u postgres psql -d $src_db -t -A -c "select c_content from $src where c_deleted is null limit 1 offset $i" > $(cat /proc/sys/kernel/random/uuid)-imported.ics
done
echo "No of items exported: $(ls | wc -w)"
for f in *.ics; do sed -i 's/COUNT=0;//g' $f; done # fix reocurring event parameter
for f in *.ics; do sed -i '/^PHOTO/d' $f && sed -i '/^ /d' $f; done # remove base64 photo
echo "Import $src to calendar $dest"
echo -e "cd $dest\nmput *" | cadaver $dest_url
cd ..
done
References