<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>update.sh</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="syntax" content="bash">
<meta name="settings" content="use_css,pre_wrap,no_foldcolumn,expand_tabs,prevent_copy=,use_input_for_pc=fallback">
<meta name="colorscheme" content="default">
<style>
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #ffffff; background-color: #000000; }
body { font-family: monospace; color: #ffffff; background-color: #000000; }
* { font-size: 1em; }
.PreProc { color: #ff40ff; }
.Comment { color: #8080ff; }
.Constant { color: #ff6060; }
.Special { color: #ff40ff; }
.Identifier { color: #00ffff; }
.Statement { color: #ffff00; }
-->
</style>
</head>
<body>
<pre id='vimCodeElement'>
<span class="Comment">#!/bin/bash</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment">## \file update.sh</span>
<span class="Comment">## \author Sebastien Beaugrand</span>
<span class="Comment">## \sa <a href="http://beaugrand.chez.com/">http://beaugrand.chez.com/</a></span>
<span class="Comment">## \copyright CeCILL 2.1 Free Software license</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">src</span>=<span class="PreProc">${</span><span class="PreProc">1</span><span class="Statement">%%</span>/<span class="PreProc">}</span>
<span class="Identifier">dst</span>=<span class="PreProc">${</span><span class="PreProc">2</span><span class="Statement">%%</span>/<span class="PreProc">}</span>

<span class="Identifier">diftmpfile</span>=/tmp/dif.tmp
<span class="Identifier">addtmpfile</span>=/tmp/add.tmp
<span class="Identifier">deltmpfile</span>=/tmp/del.tmp
<span class="Identifier">up1tmpfile</span>=/tmp/up1.tmp
<span class="Identifier">up2tmpfile</span>=/tmp/up2.tmp

<span class="Statement">echo</span>
<span class="Identifier">LANGUAGE</span>=fr diff <span class="Special">-rq</span> <span class="Special">--exclude</span><span class="Statement">=</span>*.<span class="Statement">[</span>oa<span class="Statement">]</span> <span class="Statement">&quot;</span><span class="PreProc">$src</span><span class="Statement">&quot;</span> <span class="Statement">&quot;</span><span class="PreProc">$dst</span><span class="Statement">&quot;</span> | <span class="Statement">\</span>
tee <span class="PreProc">$diftmpfile</span> | <span class="Statement">sed</span> <span class="Statement">'</span><span class="Constant">s/ et / /</span><span class="Statement">'</span>
<span class="Statement">echo</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Seulement dans src</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Statement">grep</span> <span class="Statement">&quot;</span><span class="Constant">Seulement dans </span><span class="PreProc">$src</span><span class="Constant">[:/]</span><span class="Statement">&quot;</span> <span class="PreProc">$diftmpfile</span> |<span class="Statement">\</span>
  cut <span class="Special">-c</span>16- | <span class="Statement">sed</span> <span class="Statement">'</span><span class="Constant">s/: /\//</span><span class="Statement">'</span> <span class="Statement">&gt;</span><span class="PreProc">$addtmpfile</span>
<span class="Identifier">len</span>=<span class="Special">`</span><span class="Statement">expr</span><span class="Special"> length </span><span class="PreProc">$src</span><span class="Special">`</span>
<span class="Identifier">size</span>=<span class="Special">`cat </span><span class="PreProc">$addtmpfile</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> wc </span><span class="Special">-l</span><span class="Special">`</span>
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">1</span><span class="Statement">; i </span><span class="Statement">&lt;=</span><span class="Statement"> size; ++i</span><span class="Statement">))</span>; <span class="Statement">do</span>
    <span class="Identifier">file</span>=<span class="Special">`head </span><span class="Special">-n</span><span class="Special"> </span><span class="PreProc">$i</span><span class="Special"> </span><span class="PreProc">$addtmpfile</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-c</span><span class="PreProc">$((</span><span class="Special">len + </span><span class="Constant">2</span><span class="PreProc">))</span><span class="Special">-`</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">${</span><span class="PreProc">file</span><span class="Statement">:0-1</span><span class="Statement">:1</span><span class="PreProc">}</span> <span class="Statement">=</span> <span class="Constant">'~'</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant">supprimer </span><span class="PreProc">$file</span><span class="Constant"> dans </span><span class="PreProc">$src</span><span class="Constant">/ ? (O/n) </span><span class="Statement">&quot;</span>
        <span class="Statement">read</span> ret
        <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">!=</span> n <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
            <span class="Statement">rm</span> <span class="Statement">&quot;</span><span class="PreProc">$src</span><span class="Constant">/</span><span class="PreProc">$file</span><span class="Statement">&quot;</span>
        <span class="Statement">fi</span>
    <span class="Statement">else</span>
        <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant">ajouter </span><span class="PreProc">$file</span><span class="Constant"> dans </span><span class="PreProc">$dst</span><span class="Constant">/ ? (O/n) </span><span class="Statement">&quot;</span>
        <span class="Statement">read</span> ret
        <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">!=</span> n <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
            cp <span class="Statement">-R</span> <span class="Statement">&quot;</span><span class="PreProc">$src</span><span class="Constant">/</span><span class="PreProc">$file</span><span class="Statement">&quot;</span> <span class="Statement">&quot;</span><span class="PreProc">$dst</span><span class="Constant">/</span><span class="PreProc">$file</span><span class="Statement">&quot;</span>
        <span class="Statement">fi</span>
    <span class="Statement">fi</span>
<span class="Statement">done</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Seulement dans dst</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Statement">grep</span> <span class="Statement">&quot;</span><span class="Constant">Seulement dans </span><span class="PreProc">$dst</span><span class="Constant">[:/]</span><span class="Statement">&quot;</span> <span class="PreProc">$diftmpfile</span> |<span class="Statement">\</span>
  cut <span class="Special">-c</span>16- | <span class="Statement">sed</span> <span class="Statement">'</span><span class="Constant">s/: /\//</span><span class="Statement">'</span> <span class="Statement">&gt;</span><span class="PreProc">$deltmpfile</span>
<span class="Identifier">size</span>=<span class="Special">`cat </span><span class="PreProc">$deltmpfile</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> wc </span><span class="Special">-l</span><span class="Special">`</span>
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">1</span><span class="Statement">; i </span><span class="Statement">&lt;=</span><span class="Statement"> size; ++i</span><span class="Statement">))</span>; <span class="Statement">do</span>
    <span class="Identifier">file</span>=<span class="Special">`head </span><span class="Special">-n</span><span class="Special"> </span><span class="PreProc">$i</span><span class="Special"> </span><span class="PreProc">$deltmpfile</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
    <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant">supprimer </span><span class="PreProc">$file</span><span class="Constant"> ? (O/n) </span><span class="Statement">&quot;</span>
    <span class="Statement">read</span> ret
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">!=</span> n <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">rm</span> <span class="Statement">-r</span> <span class="Statement">&quot;</span><span class="PreProc">$file</span><span class="Statement">&quot;</span>
    <span class="Statement">fi</span>
<span class="Statement">done</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># Differences</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Statement">grep</span> <span class="Statement">&quot;</span><span class="Constant">Les fichiers</span><span class="Statement">&quot;</span> <span class="PreProc">$diftmpfile</span> | cut <span class="Special">-c</span>14- |<span class="Statement">\</span>
  gawk <span class="Statement">'</span><span class="Constant">BEGIN { FS = &quot; et &quot;   } { print $1 }</span><span class="Statement">'</span> <span class="Statement">&gt;</span><span class="PreProc">$up1tmpfile</span>
<span class="Statement">grep</span> <span class="Statement">&quot;</span><span class="Constant">Les fichiers</span><span class="Statement">&quot;</span> <span class="PreProc">$diftmpfile</span> | cut <span class="Special">-c</span>14-  |<span class="Statement">\</span>
  gawk <span class="Statement">'</span><span class="Constant">BEGIN { FS = &quot; et &quot;   } { print $2 }</span><span class="Statement">'</span> |<span class="Statement">\</span>
  gawk <span class="Statement">'</span><span class="Constant">BEGIN { FS = &quot; sont &quot; } { print $1 }</span><span class="Statement">'</span> <span class="Statement">&gt;</span><span class="PreProc">$up2tmpfile</span>
<span class="Identifier">size</span>=<span class="Special">`cat </span><span class="PreProc">$up1tmpfile</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> wc </span><span class="Special">-l</span><span class="Special">`</span>
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">1</span><span class="Statement">; i </span><span class="Statement">&lt;=</span><span class="Statement"> size; ++i</span><span class="Statement">))</span>; <span class="Statement">do</span>
    <span class="Identifier">file1</span>=<span class="Special">`head </span><span class="Special">-n</span><span class="Special"> </span><span class="PreProc">$i</span><span class="Special"> </span><span class="PreProc">$up1tmpfile</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
    <span class="Identifier">file2</span>=<span class="Special">`head </span><span class="Special">-n</span><span class="Special"> </span><span class="PreProc">$i</span><span class="Special"> </span><span class="PreProc">$up2tmpfile</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special">`</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-L</span> <span class="Statement">&quot;</span><span class="PreProc">$file2</span><span class="Statement">&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">continue</span><span class="Statement">;</span>
    <span class="Statement">fi</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$file2</span><span class="Statement">&quot;</span> <span class="Statement">-nt</span> <span class="Statement">&quot;</span><span class="PreProc">$file1</span><span class="Statement">&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">ATTENTION: fichier cible plus recent que </span><span class="PreProc">$file1</span><span class="Statement">&quot;</span>
    <span class="Statement">fi</span>
    <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant">mettre a jour </span><span class="PreProc">$file2</span><span class="Constant"> ? (O/n/d) </span><span class="Statement">&quot;</span>
    <span class="Statement">read</span> ret
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">=</span> <span class="Constant">d</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        diff <span class="Statement">&quot;</span><span class="PreProc">$file1</span><span class="Statement">&quot;</span> <span class="Statement">&quot;</span><span class="PreProc">$file2</span><span class="Statement">&quot;</span>
        <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant">mettre a jour </span><span class="PreProc">$file2</span><span class="Constant"> ? (O/n) </span><span class="Statement">&quot;</span>
        <span class="Statement">read</span> ret
        <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">!=</span> n <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
            cp <span class="Statement">&quot;</span><span class="PreProc">$file1</span><span class="Statement">&quot;</span> <span class="Statement">&quot;</span><span class="PreProc">$file2</span><span class="Statement">&quot;</span>
        <span class="Statement">fi</span>
    <span class="Statement">elif</span> <span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">!=</span> n <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        cp <span class="Statement">&quot;</span><span class="PreProc">$file1</span><span class="Statement">&quot;</span> <span class="Statement">&quot;</span><span class="PreProc">$file2</span><span class="Statement">&quot;</span>
    <span class="Statement">fi</span>
<span class="Statement">done</span>

<span class="Statement">rm</span> <span class="Special">-f</span> <span class="PreProc">$diftmpfile</span><span class="Statement">\</span>
      <span class="PreProc">$addtmpfile</span><span class="Statement">\</span>
      <span class="PreProc">$deltmpfile</span><span class="Statement">\</span>
      <span class="PreProc">$up1tmpfile</span><span class="Statement">\</span>
      <span class="PreProc">$up2tmpfile</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->