20 août 2007

Synchroniser 2 répertoires en une seule commande

La synchronisation de répertoire est souvent utile lorsque l'on déplace des fichiers d'un ordinateur à l'autre en passant par une clé USB. Mon précédant billet montrait comment utiliser la commande rsync pour réaliser cette opération.

Pour compléter cet article voici une petite fonction à placer dans son fichier .profile ou .bash_profile. Elle permet d'obtenir une commande de synchronisation d'un usage simple et similaire à la commande cp :

synchro /repertoire/source /repertoire/destination


function synchro {
# $1 source
# $2 destination
if [ "x$1" != "x" ] && [ "x$2" != "x" ]; then 
    n1=`basename $1`
    n2=`basename $2`
    d1=`dirname $1`
    d2=`dirname $2`
    p1="$d1/$n1/"
    p2="$d2/$n2/"
    if [ -d $p1 ] && [ -d $p2 ] && [ $n1 = $n2 ]; then
        find $p1 -name "*~"  -exec rm -f {} \; 
        find $p2 -name "*~" -exec rm -f {} \;

        rsync -CbutPr --delete $p1 $p2
    else 
        echo "Sorry bad arguments. Try again !"
    fi
else
    echo "Too few arguments. Try again !"
fi
}