Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/08/2010, à 23:48

L00d0v1c

Synchroniser votre travail entre plusieurs PC sans internet

Voici une technique que je viens de découvrir que beaucoup de personnes doivent connaitrent mais qui me parait bien utile pour un débutant.

Travaillant sur plusieurs PC sur les mêmes projets de programmation, il m'est vite paru utile de synchroniser mon travail.
J'ai d'abord utiliser Dropbox, mais le glisser/déposer m'a vite lasser à forces.
Puis j'ai découvert Ubuntu One qui permet de synchroniser n'importe quel dossier entre plusieurs pc sous Ubuntu.
Ubuntu One est vraiment pratique mais trop lent lorsque l'on travaille sur un netbook avec une connexion 3g.

Ce que je propose est une synchronisation d'un dossier de travail sur une clès USB avec rsync.
Une sorte de Ubuntu One indépendant d'internet en quelque sorte.:P

Par exemple si je veux synchroniser le dossier "Développement" situé dans le dossier "/home/<utilisateur>" :

- Procurez vous une clés USB et formater là en ext4 (évite la fragmentation et conserve les droits).

- Créez-y un dossier nommé "Développement"

- Créer un fichier nommé "DDtoUSB.sh" contenant :

#!/bin/bash

rsync -rltgop --delete --force /home/$USER/Développement/ Développement/

Cette commande :
  parcours le dossier et ses sous dossier (-r),
  copie les liens symboliques comme liens symboliques (-l),
  préserve les dates (-d)
  préserve le groupe (-g)
  met le propriétaire du fichier de destination identique à celui du fichier source (-o)
  provoque la mise à jour des permissions sur la destination pour qu'elles soient identiques aux permissions sur la source (-p)
  efface avant le transfert les fichiers qui n'existent pas sur la source (--delete)
  force la suppression de répertoires même non-vides (--force)

Pour plus d'info je vous renvoie à la doc : rsync

Donner ensuite les droit d’exécution à ce fichier, puis exécuter le.
Vous pouvez remarquez que le dossier "Développement" de votre clés USB à un contenue identique avec celui de votre disque dur.

Maintenant, toujours dan votre clés USB, créez le fichier "USBtoDD.sh" contenant :

#!/bin/bash

rsync -rltgop --delete --force Développement/ /home/$USER/Développement/

Donner lui les droit d’exécution.
C'est la même commande que tout à l'heure mais celle-ci est inverser : elle copie le contenue du dossier "Développement" de votre clés USB dans celui de votre disque dur et supprime les fichiers qui n'existe plu sur votre USB.

Vous pouvez maintenant synchronisez votre travail sur n'importe quel ordinateur sous GNU/Linux en exécuter les deux script en fonction de la situation.

Exemple :
Vous avez modifié votre travail sur votre ordinateur de bureau et voulez le mettre sur votre netbook :
-Branchez la clés sur votre ordinateur de bureau et exécutez "DDtoUSB.sh"
-Branchez la clés sur votre netbook et exécutez "USBtoDD.sh"
Vous avez maintenant votre travail mis à jour sur votre netbook wink

Vous pouvez très bien personnaliser ce modeste script en fonction de vos goût et vos besoin wink

Dernière modification par Fishkilleur (Le 30/08/2010, à 11:32)


Pour votre culture, chargez trois pages de Wikipédia par jour.

Hors ligne

#2 Le 30/08/2010, à 08:10

J5012

Re : Synchroniser votre travail entre plusieurs PC sans internet

Hors ligne

#3 Le 30/08/2010, à 08:21

chopinhauer

Re : Synchroniser votre travail entre plusieurs PC sans internet

Fishkilleur a écrit :

- Créer un fichier nommé "dd=>usb.sh" contenant :

Ton choix de nom des scripts n'est pas génial : '=' et '>' sont des caractères spéciaux de bash et la prochaine fois que tu tapes ce nom directement dans la ligne de commande des choses bizarres surviendrons. Vaut mieux utiliser des caractères alphanumériques, le tiret et l'underscore.

PS: pour ce que tu fais, tu peux aussi utiliser Unison ou Conduit. Unison en particulier va mettre à jour les fichiers dans les deux sens.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#4 Le 30/08/2010, à 11:35

L00d0v1c

Re : Synchroniser votre travail entre plusieurs PC sans internet

Effectivement je ne l'avais pas remarquer, j'ai corriger en mettant "DDtoUSB.sh".
Je connais Unison, mais je trouve rsync bien plus simple et je peut entièrement contrôler la sauvegarde ( par exemple je uniquement copier les dossier sur mon DD en gardant ceux de mon USB). De plus il est installer par défaut sur tout les système Gnu/Linux donc je suis sur qu'il marcheras partout. wink


Pour votre culture, chargez trois pages de Wikipédia par jour.

Hors ligne

#5 Le 09/10/2010, à 19:12

Vermouth

Re : Synchroniser votre travail entre plusieurs PC sans internet

Bonjour.

Je viens de tombé par hasare sur ce topic, je suis justement en train de chercher à synchroniser un dossier sur mon PC perso avec un sur es PC de ma fac.

Donc j'ai pensé à unison mais il n'est pas installé sur les PC de ma fac (où les PC tourne sous CentOS wink ).
Rsync l'est (installé).

Mais le problème de rsync c'est que c'est impossible de faire de la synchronisation. Du style effacé les fichiers de la clé USB si il ont été effacé sur mon PC (en tout cas pas à ma connaissance).

J'ai cherché à compiler unison pour l'embarqué sur ma clé USB (compilé en liaison statique car il manque des libs sur les PC de ma fac) mais pas moyen hmm !

Donc j'en suis à ce script:

#!/bin/bash

RSYNC_OPT="--recursive --times --perms --executability --update"

NOM_PC_PERSO=GG-laptop
PC_PERSO=~/Documents/Faculté/M1/
PC_FAC=~/M1/
CLE_USB=M1/

#########
synchro()
{
rsync $RSYNC_OPT $1 $2;
rsync $RSYNC_OPT $2 $1;
}

host=$('hostname');

if [ $host = $NOM_PC_PERSO ]; then
{
echo "[PC Personnel]";
echo "Synchronisation avec $host: $CLE_USB <-> $PC_PERSO...";
synchro $CLE_USB $PC_PERSO;
}
else
{
echo "[PC UM2]";
echo "Synchronisation avec $host: $CLE_USB <-> $PC_FAC...";
synchro $CLE_USB $PC_FAC;
}
fi

echo "[Terminé]";

exit 0;

Nommé autorun est placé sur ma clé USB ça roule mais le problème est que si j'efface un fichier, il finira par réaparaitre.
Je voulais une solution simple, du style, je branche ma clé USB et je clique sur "exécuté" lorsqu'on me demande si oui ou non je veux exécuter le script.
Devoir ouvrir un terminal, réfléchir pour ne pas se tromper dans quel sens copié, c'est de suite plus compliquer...

Je suis un peu à cour d'idée là ! Et vous ?

Merci smile !


Android !
\_/°<

   coin coin...

Hors ligne

#6 Le 09/10/2010, à 19:45

L00d0v1c

Re : Synchroniser votre travail entre plusieurs PC sans internet

Du style effacé les fichiers de la clé USB si il ont été effacé sur mon PC

  --delete :efface avant le transfert les fichiers qui n'existent pas sur la source

Avec Rsync ce serais donc quelque chose comme :

rsync (diverse option)--delete (fichier source du PC) (fichier destinataire de la clès)


Pour votre culture, chargez trois pages de Wikipédia par jour.

Hors ligne

#7 Le 09/10/2010, à 20:15

Vermouth

Re : Synchroniser votre travail entre plusieurs PC sans internet

Fishkilleur a écrit :

Du style effacé les fichiers de la clé USB si il ont été effacé sur mon PC

  --delete :efface avant le transfert les fichiers qui n'existent pas sur la source

Avec Rsync ce serais donc quelque chose comme :

rsync (diverse option)--delete (fichier source du PC) (fichier destinataire de la clès)

Oui mais si un nouveau fichier est créer dans le dossier de destination ?
Bein il est est effacé et c'est ça qui pose problème !

edit: j'ai réussit à compiler unison en liaison statique. Me restera à voir si ça marche sur les PC de ma fac (je n'ai jamais essayé une tel chose). smile

Dernière modification par Vermouth (Le 09/10/2010, à 21:28)


Android !
\_/°<

   coin coin...

Hors ligne

#8 Le 12/10/2010, à 01:36

J5012

Re : Synchroniser votre travail entre plusieurs PC sans internet

ya une option exclude... lire le man...

Hors ligne

#9 Le 12/10/2010, à 21:57

Vermouth

Re : Synchroniser votre travail entre plusieurs PC sans internet

J5012 a écrit :

ya une option exclude... lire le man...

Oui mais pour que cette option me serve, il faudrait que je liste les fichiers à exclure et ça c'est pas non plus de la tarte !
De toute façon c'est simple, si on utilise pas un fichier pour mémoriser l'état des deux dossier à synchroniser, on ne peut pas savoir si un fichier présent d'un coté et absent de l'autre à été ajouter au premier ou  supprimer dans le second. Unison utilise un fichier justement. Rsync non à ma connaissance.

Donc ça serait sûrement plus simple que j'arrive à faire marché unison à ma fac.
Actuellement, j'ai réussit à le compiler en liaison static mais il demande encore des libs en dinamique (je crois que c'est du à l'utilisation de ocaml que je ne connais pas). Donc j'ai téléchargé ces libs, je les aient mise dans le même dossier que unison et je fait:

export LD_LIBRARY_PATH=./

Unison se lance mais fait une erreur de compilation. Je pense que c'est du au faite que j'ai choppé les libs sur package.ubuntu. Je vais essayer avec les libs installé sur mon système.
Mais il me reste encore à regardé si il ne faudrait pas gérer une option sur ocamlc pour la liaison static...

Si quelqu'un à une idée...


Android !
\_/°<

   coin coin...

Hors ligne

#10 Le 14/10/2010, à 19:12

Vermouth

Re : Synchroniser votre travail entre plusieurs PC sans internet

Bon bien bonne nouvelle pour moi et pour ceux que ça intéresse.
J'ai réussit à trouver un binaire qui fonctionne, c'est par ici smile !
Avec un petit script bash autorun c'est impeccable !

edit: pour pallier les problèmes d'hôte différent, on peut utiliser la variable d'environnement UNISONLOCALHOSTNAME pour changer le nom d'hôte aux yeux d'unison...

Dernière modification par Vermouth (Le 16/10/2010, à 23:15)


Android !
\_/°<

   coin coin...

Hors ligne