<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.windu2b.org/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Bla Bla Blog - synchronisation</title>
  <link>http://blog.windu2b.org/index.php/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Wed, 28 May 2008 15:06:30 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>rsync, ou les joies de la mise à jour pour assistés</title>
    <link>http://blog.windu2b.org/index.php/post/2007/10/29/rsync-ou-les-joies-de-la-mise-a-jour-pour-assistes</link>
    <guid isPermaLink="false">urn:md5:f6fb7e9c0ba2bab26968112b0917cae8</guid>
    <pubDate>Mon, 29 Oct 2007 22:28:00 +0100</pubDate>
    <dc:creator>windu.2b</dc:creator>
        <category>Linux &amp; les LL</category>
        <category>Linux</category><category>rsync</category><category>shell</category><category>synchronisation</category>    
    <description>&lt;p&gt;Depuis un petit moment que ça me travaillait, j'ai envie pris le temps de faire un (petit) script Shell pour automatiser la mise à jour des chansons sur mon baladeur.
&lt;br /&gt;
Le problème était le suivant&amp;nbsp;: il m'arrive parfois de remarquer que certains de mes fichiers musicaux sont mal &quot;taggués&quot; voire pas du tout&amp;nbsp;! Après une modification des tags ID3 du fichier, il m'arrivait souvent d'oublier de mettre à jour la copie dudit fichier qui se trouve sur mon baladeur, tout simplement parce qu'il m'aurait fallu vérifier si, oui ou non, ce fichier s'y trouvait (mon baladeur ne contient en effet pas tous mes fichiers musicaux).
&lt;br /&gt;
D'où mon problème&amp;nbsp;: comment synchroniser les fichiers musicaux en local sur mon ordinateur avec ceux (et seulement ceux-là)  présents sur mon baladeur&amp;nbsp;?&lt;/p&gt;    &lt;h3&gt;La réponse&amp;nbsp;: rsync bien sûr&amp;nbsp;!&lt;/h3&gt;

&lt;p&gt;Cette petite application Unix (elle existe pour Linux, Mac OS X, BSD... mais pas pour Windows, du moins à ma connaissance) permet à la base de faire des sauvegardes incrémentielles. C'est à dire qu'au lieu de recopier bêtement la totalité des fichiers, rsync va être capable de détecter les fichiers qui auront été modifiés &lt;sup&gt;[&lt;a href=&quot;http://blog.windu2b.org/index.php/post/2007/10/29/#pnote-16-1&quot; id=&quot;rev-pnote-16-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;.&lt;br /&gt;
Voici donc la solution :&lt;br /&gt;
&lt;code&gt;rsync -rvlptoDh --progress --existing --modify-window=1 source/ destination/&lt;/code&gt;
&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;Décortiquons tout ceci, voulez-vous&amp;nbsp;?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;-r&amp;nbsp;: Ceci dit à rsync de copier les répertoires récursivement.&lt;/li&gt;
&lt;li&gt;-v&amp;nbsp;: Cette option augmente la quantité d'information que vous obtenez lors du transfert. Par défaut, rsync travaille silencieusement. Avec un -v, rsync vous indique quels sont les fichiers actuellement transmis et affiche un bref résumé à la fin. Avec deux drapeaux -v, rsync vous informe des fichiers ignorés et affiche un résumé avec légèrement plus d'information à la fin. Plus de deux drapeaux -v ne devraient être utilisés que pour déboguer rsync.&lt;/li&gt;
&lt;li&gt;-l&amp;nbsp;: Lorsque des liens symboliques sont rencontrés, ils sont recréés à la destination.&lt;/li&gt;
&lt;li&gt;-p&amp;nbsp;: Cette option entraîne la mise à jour des permissions distantes pour qu'elles soient identiques aux permissions locales. Sans cette option, tous les fichiers existants (y compris les fichiers mis à jour) gardent leur permissions actuelles, tandis que les nouveaux fichiers reçoivent des permissions basées sur les permissions du fichier source mais masquées par le masque utilisateur du récepteur (ce comportement est identique aux autres utilitaires de copie de fichier, tel que cp).&lt;/li&gt;
&lt;li&gt;-t&amp;nbsp;: Ceci dit à rsync de transférer les dates de modifications avec les fichiers et de les mettre à jour sur le système distant. Notez que si cette option n'est pas utilisée, l'optimisation qui consiste à exclure les fichiers qui n'ont pas été modifiés ne peut pas être efficace&amp;nbsp;; en d'autres termes, un -t ou -a absent va faire que le prochain transfert se ferra comme s'il utilisait -I, ce qui implique que tous les fichiers seront mis à jour (même si l'algorithme rsync rendra l'opération relativement efficace si les fichiers n'ont pas été modifiés, vous avez tout intérêt à utiliser -t).&lt;/li&gt;
&lt;li&gt;-o&amp;nbsp;: Cette option dit à rsync de mettre le propriétaire du fichier de destination identique à celui du fichier source. Sur la plupart des systèmes, uniquement le super-utilisateur peut fixer le propriétaire des fichiers. Par défaut, la conservation est effectuée selon le nom mais lorsque cela ne fonctionne pas, rsync utilise comme alternative le numéro ID. Référez-vous à l'option\ --numeric-ids pour plus de détail.&lt;/li&gt;
&lt;li&gt;- h&amp;nbsp;: affiche les valeurs numériques sous un format lisible &quot;humainement&quot;.&lt;/li&gt;
&lt;li&gt;--progress&amp;nbsp;: Cette option demande à rsync d'afficher des informations montrant la progression des transferts. Ceci donne à un utilisateur qui s'ennuie quelque chose à regarder. Implique l'option --verbose lorsqu'elle n'a pas déjà été spécifiée.&lt;/li&gt;
&lt;li&gt;--existing&amp;nbsp;: met à jour uniquement les fichiers qui existent déjà&lt;/li&gt;
&lt;li&gt;--modify-window=NUM&amp;nbsp;: compare les dates avec une précision moins fine&lt;/li&gt;
&lt;li&gt;source/&amp;nbsp;: désigne le répertoire servant de départ&lt;/li&gt;
&lt;li&gt;destination/&amp;nbsp;: désigne le répertoire dans lequel les fichiers doivent être copiés&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Tout ceci est bien beau, mais concrètement&amp;nbsp;?&lt;/h3&gt;

&lt;p&gt;Concrètement, cela va lister tous les fichiers contenus dans source/ et pour chacun d'eux, vérifier si un fichier portant le même nom se trouve dans destination/ et, le cas échéant, contrôler les dates de dernière modification. Si le fichier dans source/ est plus récent, alors il sera recopié vers derstination/&lt;br /&gt;
À noter que l'option --existing est très importante&amp;nbsp;! C'est elle qui limite le traitement aux fichiers déjà existants dans destination/ (sans ça, rsync copiera tous les fichiers présents dans source/).&lt;br /&gt;
Autre point important&amp;nbsp;: l'option --modify-window=NUM permet de comparer les dates de dernière modification avec une moindre  précision. en effet, le système de fichiers FAT a une précision de seulement 2s, ce qui n'est pas le cas des systèmes de fichiers comme ext3 (précision à 1s). Avec cette option, on peut ainsi contourner le problème (qui pourrait faire croire qu'un fichier dans destination/ est moins récent alors qu'il a juste une mauvaise précision sur l'heure de dernière modification).&lt;/p&gt;



&lt;p&gt;Voilà, pour le moment tout ceci fonctionne parfaitement. Je ferai sans doute un prochain billet pour préciser comment automatiser tout ceci (soit via un cron, soit lors du montage de la partition du baladeur).&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://blog.windu2b.org/index.php/post/2007/10/29/#rev-pnote-16-1&quot; id=&quot;pnote-16-1&quot;&gt;1&lt;/a&gt;] soit en se basant sur leurs tailles respectives, soit sur la date de dernière édition voire les 2, cela dépendra des options qui lui auront été passées en paramètre.&lt;/p&gt;&lt;/div&gt;
</description>
    
    
    
          <comments>http://blog.windu2b.org/index.php/post/2007/10/29/rsync-ou-les-joies-de-la-mise-a-jour-pour-assistes#comment-form</comments>
      <wfw:comment>http://blog.windu2b.org/index.php/post/2007/10/29/rsync-ou-les-joies-de-la-mise-a-jour-pour-assistes#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.windu2b.org/index.php/feed/rss2/comments/16</wfw:commentRss>
      </item>
    
</channel>
</rss>