{"id":925,"date":"2010-06-05T18:43:49","date_gmt":"2010-06-05T16:43:49","guid":{"rendered":"http:\/\/linux.leunen.com\/?p=925"},"modified":"2010-06-05T18:43:49","modified_gmt":"2010-06-05T16:43:49","slug":"synchroniser-deux-repertoires-distants-par-ftp","status":"publish","type":"post","link":"https:\/\/www.leunen.com\/linux\/2010\/06\/synchroniser-deux-repertoires-distants-par-ftp\/","title":{"rendered":"Synchroniser deux r\u00e9pertoires distants par FTP"},"content":{"rendered":"<p>On connait tous <em>rsync<\/em> qui permet de synchroniser deux r\u00e9pertoires en faisant des sauvegardes incr\u00e9mentielles. Cette synchronisation est unidirectionnelle; il y a un r\u00e9pertoire source et un r\u00e9pertoire de destination. Malheureusement, <em>rsync<\/em> ne fonctionne pas en FTP. Mais heureusement, dans la panoplie des outils pour Linux, il existe une application qui est capable de synchroniser deux r\u00e9pertoires via FTP: <em>lftp<\/em>.<\/p>\n<p><em>lftp<\/em> est un client FTP tr\u00e8s \u00e9volu\u00e9. Il s&rsquo;utilise en ligne de commande et son gros avantage est sa capacit\u00e9 de faire du <em>mirroring<\/em>. Le <em>mirroring<\/em> consiste \u00e0 comparer deux r\u00e9pertoires et \u00e0 les synchroniser pour qu&rsquo;ils soient identiques. lftp est capable de synchroniser un r\u00e9pertoire distant avec un r\u00e9pertoire local ou, l&rsquo;inverse, synchroniser un r\u00e9pertoire local avec un r\u00e9pertoire distant. La diff\u00e9rence r\u00e9side dans le fait que dans le premier cas, la source est le r\u00e9pertoire local et dans le second, la source est le r\u00e9pertoire distant.<\/p>\n<p>La commande de base si on veut que la source soit le r\u00e9pertoire local est :<\/p>\n<pre class=\"codesource\">\r\nlftp ftp:\/\/login:password@host -c \"mirror --delete --reverse --exclude-glob dossier_\u00e0_exclure \/r\u00e9pertoire_local \/r\u00e9pertoire_distant\"\r\n<\/pre>\n<p>Dans le cas o\u00f9 on veut une synchro du r\u00e9pertoire local avec comme source le r\u00e9pertoire distant, on supprime l&rsquo;option <em>&#8211;reverse<\/em>.<br \/>\nl&rsquo;option -c de <em>lftp<\/em> permet de donner \u00e0 <em>lftp<\/em> un ensemble de commandes. Elle doivent \u00eatre entre guillemets et s\u00e9par\u00e9es par des points-virgules. Notez aussi que l&rsquo;option <em>&#8211;exclude-glob<\/em> peut \u00eatre ins\u00e9r\u00e9e plusieurs fois s&rsquo;il y a plusieurs r\u00e9pertoires ou fichiers \u00e0 exclure. Cette option accepte les wildcards (*,?). Je ne vais pas d\u00e9tailler toutes les commandes mais sachez que les commandes classiques de FTP sont reconnues (cd, lcd, get, mmet, put, mput,&#8230;). Je vous conseille la lecture de la page de manuel pour toutes les options et possibilit\u00e9s de ce programme.<\/p>\n<p>Evidemment, lftp est particuli\u00e8rement bien adapt\u00e9 \u00e0 son utilisation au sein d&rsquo;un script. A titre d&rsquo;exemple, voici un petit script bash appel\u00e9 ftpsync qui synchronise un r\u00e9pertoire distant \u00e0 partir d&rsquo;un r\u00e9pertoire local:<\/p>\n<pre class=\"codesource\">\r\n#!\/bin\/bash\r\n#\r\n# Synchronise deux r\u00e9pertoires en utilisant FTP\r\n\r\nHOST=\"ftp.votre_site.com\"\r\nLOGIN=\"votre_login\"\r\nPASSWORD=\"mot_de_passe\"\r\nLOCALDIR=\"$1\"\r\nREMOTEDIR=\"\/\"\r\nEXCLUDED=\"*.*~\"\r\n\r\nfunction Usage()\r\n{\r\n  echo -e \"\\n  Synchronise un r\u00e9pertoire local avec un r\u00e9pertoire distant en utilisant FTP\";  \r\n  echo -e \"\\n  USAGE: ftpsync local_dir\";\r\n  echo;\r\n}\r\n\r\nif [ \"$LOCALDIR\" = \"\" ]\r\nthen\r\n  echo -e \"  ERREUR: Veuillez sp\u00e9cifier un r\u00e9pertoire local\";\r\n  Usage;\r\n  exit 1;\r\nfi\r\n\r\nif [ -e \"$LOCALDIR\" ]\r\nthen\r\n  lftp -c \"set ftp:list-options -a;\r\n  open ftp:\/\/$LOGIN:$PASSWORD@$HOST; \r\n  lcd $LOCALDIR;\r\n  cd $REMOTEDIR;\r\n  mirror --reverse \\\r\n         --delete \\\r\n         --verbose \\\r\n         --exclude-glob $EXCLUDED\";\r\nfi\r\n<\/pre>\n<p>A l&rsquo;heure o\u00f9 on parle de plus en plus de cloud computing, o\u00f9 il est facile de se procurer des zones de stockage sur Internet gratuitement comme <em>DropBox<\/em>, <em>UbuntuOne<\/em> ou autre <em>SpiderOak<\/em>, synchroniser deux r\u00e9pertoires par FTP peut sembler anachronique mais <em>lftp<\/em> peut encore rendre de grands services pour faire, par exemple, des backups de votre site web distants sur votre PC en local.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On connait tous rsync qui permet de synchroniser deux r\u00e9pertoires en faisant des sauvegardes incr\u00e9mentielles. Cette synchronisation est unidirectionnelle; il y a un r\u00e9pertoire source et un r\u00e9pertoire de destination. Malheureusement, rsync ne fonctionne pas en FTP. Mais heureusement, dans la panoplie des outils pour Linux, il existe une application qui est capable de synchroniser [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/925"}],"collection":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/comments?post=925"}],"version-history":[{"count":3,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/925\/revisions"}],"predecessor-version":[{"id":928,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/925\/revisions\/928"}],"wp:attachment":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/media?parent=925"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/categories?post=925"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/tags?post=925"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}