L4L.be

...because open source matters

  • Increase font size
  • Default font size
  • Decrease font size
Home Linux Documentatie Linux op de desktop Foldersynchronisatie met Dolpin

Foldersynchronisatie met Dolpin

E-mail Print PDF

Vermoedelijk kent zo ongeveer iedereen wel de problemen met het synchroon houden van documenten over meerdere locaties, vaak met behulp van bijvoorbeeld een usb-stick. Tot nu toe deed ik dit meestal allemaal handmatig, want wat te lui om goede rsync scripts te maken. ps: veel mensen ervaren overigens unison handiger dan rsync voor dit soort dingen.

Anyway, tijdens het werken met Dolphin, de standaard bestandsbeheer applicatie van KDE4, viel me op dat hier onder de rechtermuisknop een item aanwezig was: Actions, met daarin bijvoorbeeld de mogelijkheid een directory te comprimeren.. Zou hier niet een mogelijkheid zijn om een optie aan te maken: Synchroniseer Folder ?

Na wat Google werk, besloot ik dat dit script wel een goede basis zou kunnen zijn. Dus aan de slag !

Benodigdheden

De utility rsync staat standaard geinstalleerd, nu alleen nog KDialog om grafische schermen mee te maken. Onder OpenSUSE 11 kun je deze eenvoudig installeren door in een terminal uit te voeren:

sudo zypper install kde4-kdialog

Dolphin Actions

Het was nog een hele opgave om uit te zoeken waar je nu precies die Action menu-items aanmaakt, de zoektocht werd ook nog bemoeilijkt doordat dit niet juist in het Dolphin Handboek staat.. Ik weet ook niet hoe distributie-onhankelijk dit is, maar voor OpenSUSE 11 en Mandriva 2009 is de lokatie /usr/share/kde4/services/ServiceMenus. Hierin maken we een bestand aan, syncfolder.desktop met de volgende inhoud:

[Desktop Entry]
X-SuSE-translate=false
Type=Service
X-KDE-ServiceTypes=KonqPopupMenu/Plugin,inode/directory
Actions=syncdir;

[Desktop Action syncdir]
Name=Synchronize Folder
Icon=kget
Exec=/usr/local/bin/syncfolder.sh %u

De volgende keer dat je Dolphin opstart zal het menu-item aanwezig zijn. Ik ga in dit document niet op de details van dit bestand in, maar 2 zaken zijn belangrijk:

  • Met X-KDE-ServiceTypes geef ik aan dat ik het wil menu item alleen wil toepassen op directories
  • Achter de script naam bij Exec staat een %u, deze variabele staat voor de directory naam die je hebt aangeklikt met de rechtermuisknop.

Synchroniseren

We maken nu een script aan, /usr/local/bin/syncfolder.sh:

#!/bin/sh
folder=$1
doeldir=`kdialog --getexistingdirectory /media`
qdbusRef=`kdialog --progressbar "Synchronisatie voortgang"`
qdbus $qdbusRef showCancelButton true

for i in `find $folder -name '*' -type d`
do
qdbus $qdbusRef setLabelText "Synchroniseer $i naar $doeldir"
echo "--------------------------------------"
echo "$i  ==>  $doeldir"
inc=$((`qdbus $qdbusRef org.freedesktop.DBus.Properties.Set org.kde.kdialog.ProgressDialog value` + 1))

sleep 2
if [ -e $i ]; then
  qdbus $qdbusRef $inc
  RSCMD="rsync --recursive --times --delete-during --stats --human-readable -h $i $doeldir"
  echo $RSCMD
  $RSCMD
  qdbus $qdbusRef setLabelText "Synchronisatie $i gereed"
else
  qdbus $qdbusRef $inc
  echo "ERROR"
fi
echo "======================================="
sleep 2
done

qdbus $qdbusRef close

Ook hier wil ik verder niet al te diep op ingaan, hooguit: qdbus is de vervanging voor dcop, maar werkt eigenlijk op een zelfde manier

Tenslotte

Dit document wil vooral gewoon een oplossing geven, niet alle parameters verklaren etc. Maar het geeft hopelijk ook aan dat je met kdialog en qdbus een heleboel gave dingen kan doen ! Hier zullen zeker nog diverse documenten aan gewijd worden.

Last Updated on Wednesday, 12 August 2009 07:58