<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>mp3style.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 mp3style.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="Comment"># Trouver les répertoires sans liste m3u :</span>
<span class="Comment">#  find . -type d -exec test ! -f {}/00.m3u \; -print</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span> <span class="Statement">=</span> <span class="Constant">&quot;-i&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
    <span class="Identifier">interactive</span>=<span class="Constant">1</span>
    <span class="Statement">shift</span>
<span class="Statement">else</span>
    <span class="Identifier">interactive</span>=<span class="Constant">0</span>
<span class="Statement">fi</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span> <span class="Statement">=</span> <span class="Constant">&quot;m4a&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
    <span class="Identifier">ext</span>=<span class="Statement">&quot;</span><span class="Constant">m4a</span><span class="Statement">&quot;</span>
    <span class="Statement">if </span><span class="Statement">!</span> which boxdumper <span class="Statement">&gt;</span>/dev/null <span class="Constant">2</span><span class="Statement">&gt;</span><span class="Statement">&amp;</span><span class="Constant">1</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">error: boxdumper not found</span><span class="Statement">&quot;</span>
        <span class="Statement">exit</span> <span class="Constant">1</span>
    <span class="Statement">fi</span>
<span class="Statement">else</span>
    <span class="Identifier">ext</span>=<span class="Statement">&quot;</span><span class="Constant">mp3</span><span class="Statement">&quot;</span>
    <span class="Statement">if </span><span class="Statement">!</span> which id3ed <span class="Statement">&gt;</span>/dev/null <span class="Constant">2</span><span class="Statement">&gt;</span><span class="Statement">&amp;</span><span class="Constant">1</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">error: id3ed not found</span><span class="Statement">&quot;</span>
        <span class="Statement">exit</span> <span class="Constant">1</span>
    <span class="Statement">fi</span>
    <span class="Statement">if </span><span class="Statement">!</span> which mpg123 <span class="Statement">&gt;</span>/dev/null <span class="Constant">2</span><span class="Statement">&gt;</span><span class="Statement">&amp;</span><span class="Constant">1</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">error: mpg123 not found</span><span class="Statement">&quot;</span>
        <span class="Statement">exit</span> <span class="Constant">1</span>
    <span class="Statement">fi</span>
    <span class="Statement">if </span><span class="Statement">!</span> which id3v2 <span class="Statement">&gt;</span>/dev/null <span class="Constant">2</span><span class="Statement">&gt;</span><span class="Statement">&amp;</span><span class="Constant">1</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">error: id3v2 not found</span><span class="Statement">&quot;</span>
        <span class="Statement">exit</span> <span class="Constant">1</span>
    <span class="Statement">fi</span>
<span class="Statement">fi</span>

<span class="Statement">if </span><span class="Statement">find</span><span class="Statement"> . </span>-print <span class="Statement">|</span> <span class="Statement">grep</span> <span class="Statement">-P</span> <span class="Statement">&quot;</span><span class="Constant">[^a-zA-Z0-9()',./ [\]_%+-]</span><span class="Statement">&quot;</span><span class="Statement">;</span> <span class="Statement">then</span>
    <span class="Statement">exit</span> <span class="Constant">1</span>
<span class="Statement">fi</span>

<span class="Statement">dirs</span><span class="Statement">=</span>mp3style-dir.tmp
<span class="Identifier">mp3s</span>=mp3style-mp3.tmp
<span class="Statement">find</span><span class="Statement"> . </span>-type d <span class="Special">-print</span> | <span class="Identifier">LC_ALL</span>=C <span class="Statement">sort</span> <span class="Statement">&gt;</span><span class="PreProc">$dirs</span>
<span class="Identifier">ndir</span>=<span class="Special">`cat </span><span class="PreProc">$dirs</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">trap</span> <span class="Statement">&quot;</span><span class="Constant">rm </span><span class="PreProc">$dirs</span><span class="Constant">; echo; exit 0</span><span class="Statement">&quot;</span> SIGINT

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># rdexec</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">rdexec()</span>
<span class="Identifier">{</span>
    <span class="Statement">for ((</span><span class="Statement">rj </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">1</span><span class="Statement">; rj </span><span class="Statement">&lt;=</span><span class="Statement"> ndir; ++rj</span><span class="Statement">))</span><span class="Statement">;</span> <span class="Statement">do</span>
        <span class="Identifier">rd</span>=<span class="Special">`head </span><span class="Special">-n</span><span class="Special"> </span><span class="PreProc">$rj</span><span class="Special"> </span><span class="PreProc">$dirs</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">eval</span> <span class="PreProc">$1</span> <span class="Special">\&quot;</span><span class="Statement">&quot;</span><span class="PreProc">$rd</span><span class="Statement">&quot;</span><span class="Special">\&quot;</span> <span class="Special">\&quot;</span><span class="Statement">&quot;</span><span class="PreProc">$2</span><span class="Statement">&quot;</span><span class="Special">\&quot;</span>
    <span class="Statement">done</span>
<span class="Identifier">}</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># rfexec</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">rfexec()</span>
<span class="Identifier">{</span>
    <span class="Statement">cd</span> <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>
    <span class="Statement">find</span><span class="Statement"> . </span>-maxdepth <span class="Constant">1</span> <span class="Special">-name</span> <span class="Statement">&quot;</span><span class="Constant">*.</span><span class="PreProc">$ext</span><span class="Statement">&quot;</span> <span class="Special">-print</span> <span class="Statement">|</span> <span class="PreProc">LC_ALL</span><span class="Statement">=</span>C <span class="Statement">sort</span> <span class="Statement">&gt;</span><span class="PreProc">$mp3s</span>
    <span class="Identifier">nmp3</span>=`cat <span class="PreProc">$mp3s</span> <span class="Statement">|</span> wc <span class="Special">-l</span>`
    <span class="Statement">for ((</span><span class="Statement">ri </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">1</span><span class="Statement">; ri </span><span class="Statement">&lt;=</span><span class="Statement"> nmp3; ++ri</span><span class="Statement">))</span><span class="Statement">;</span> <span class="Statement">do</span>
        <span class="Identifier">rf</span>=<span class="Special">`head </span><span class="Special">-n</span><span class="Special"> </span><span class="PreProc">$ri</span><span class="Special"> </span><span class="PreProc">$mp3s</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">eval</span> <span class="PreProc">$2</span> <span class="Special">\&quot;</span><span class="Statement">&quot;</span><span class="PreProc">$rf</span><span class="Statement">&quot;</span><span class="Special">\&quot;</span>
    <span class="Statement">done</span>
    <span class="Statement">rm</span> <span class="PreProc">$mp3s</span>
    <span class="Statement">cd</span> - <span class="Statement">&gt;</span>/dev/null <span class="Constant">2</span><span class="Statement">&gt;&amp;1</span>
<span class="Identifier">}</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># fffb</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">fffb()</span>
<span class="Identifier">{</span>
    <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>
    <span class="Identifier">s</span>=`hexdump <span class="Special">-e</span> <span class="Statement">'</span><span class="Constant">/1 &quot;%02X&quot;</span><span class="Statement">'</span> <span class="Special">-v</span> <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span> <span class="Statement">|</span> <span class="Statement">grep</span> <span class="Special">-b</span> <span class="Special">-o</span> FFFB <span class="Statement">|</span> \
        head <span class="Special">-n</span> <span class="Constant">1</span> <span class="Statement">|</span> cut <span class="Special">-d</span> <span class="Statement">'</span><span class="Constant">:</span><span class="Statement">'</span> <span class="Special">-f</span> <span class="Constant">1</span>`
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">&quot;</span><span class="PreProc">$s</span><span class="Statement">&quot;</span> <span class="Statement">]</span> <span class="Statement">&amp;&amp;</span> <span class="Special">((</span>s <span class="Statement">&gt;</span> <span class="Constant">1</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Identifier">s</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$s</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> awk </span><span class="Statement">'</span><span class="Constant">{ print rshift($0, 1) }</span><span class="Statement">'</span><span class="Special">`</span>
        <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="PreProc">$s</span><span class="Statement">&quot;</span>
        dd <span class="Statement">status</span><span class="Statement">=</span>noxfer <span class="Identifier">if</span>=<span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span> <span class="Identifier">ibs</span>=<span class="PreProc">$s</span> <span class="Identifier">skip</span>=<span class="Constant">1</span> <span class="Identifier">of</span>=mp3.tmp <span class="Constant">2</span><span class="Statement">&gt;</span>/dev/null
        <span class="Statement">mv</span> mp3.tmp <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>
    <span class="Statement">fi</span>
    <span class="Statement">echo</span>
<span class="Identifier">}</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># ucfirst</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">ucfirst()</span>
<span class="Identifier">{</span>
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">|</span> cut <span class="Special">-c</span>3- <span class="Statement">|</span>\
    awk <span class="Statement">'</span><span class="Constant">BEGIN { FS = &quot; *|_&quot; }</span>
<span class="Constant">    {</span>
<span class="Constant">        printf &quot;mv \&quot;%s\&quot; \&quot;&quot;, $0;</span>
<span class="Constant">        for(j = 1; j &lt;= NF; j++) {</span>
<span class="Constant">            if (j == 2 &amp;&amp; $j != &quot;-&quot;) {</span>
<span class="Constant">                printf &quot;- &quot;;</span>
<span class="Constant">            }</span>
<span class="Constant">            size = length($j);</span>
<span class="Constant">            printf &quot;%c&quot;,toupper(substr($j, 1, 1));</span>
<span class="Constant">            for(i = 2; i &lt;= size; i++) {</span>
<span class="Constant">                if (substr($j, i - 1, 1) == &quot;(&quot;) {</span>
<span class="Constant">                    printf &quot;%s&quot;,toupper(substr($j, i, 1));</span>
<span class="Constant">                } else {</span>
<span class="Constant">                    printf &quot;%c&quot;,tolower(substr($j, i, 1));</span>
<span class="Constant">                }</span>
<span class="Constant">            }</span>
<span class="Constant">            if (j &lt; NF) {</span>
<span class="Constant">                printf &quot; &quot;;</span>
<span class="Constant">            }</span>
<span class="Constant">        }</span>
<span class="Constant">        printf &quot;\&quot;\n&quot;;</span>
<span class="Constant">    }</span>
<span class="Constant">    </span><span class="Statement">'</span> <span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">{ system($0) }</span><span class="Statement">'</span> <span class="Constant">2</span><span class="Statement">&gt;</span>/dev/null
<span class="Identifier">}</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># tag</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">tag()</span>
<span class="Identifier">{</span>
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>
    <span class="Identifier">size</span>=`stat <span class="Special">-c</span> <span class="Statement">&quot;</span><span class="Constant">%s</span><span class="Statement">&quot;</span> <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>`
    <span class="Statement">if </span><span class="Special">((</span>size <span class="Statement">==</span> <span class="Constant">0</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">return</span>
    <span class="Statement">fi</span>
    <span class="Identifier">f</span>=`basename <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>`
    <span class="Identifier">i</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">${</span><span class="PreProc">f</span><span class="Statement">:0</span><span class="Statement">:2</span><span class="PreProc">}</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">{ print $0 + 0 }</span><span class="Statement">'</span>`
    id3v2 <span class="Special">-D</span> <span class="Statement">&quot;</span><span class="PreProc">$f</span><span class="Statement">&quot;</span> <span class="Statement">&gt;</span>/dev/null
    <span class="Identifier">title</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">${</span><span class="PreProc">f</span><span class="Statement">%</span>.<span class="PreProc">$ext</span><span class="PreProc">}</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">|</span> cut <span class="Special">-c</span>6-`
    id3ed <span class="Special">-n</span> <span class="Statement">&quot;</span><span class="PreProc">$artist</span><span class="Statement">&quot;</span> <span class="Special">-a</span> <span class="Statement">&quot;</span><span class="PreProc">$album</span><span class="Statement">&quot;</span> <span class="Special">-y</span> <span class="Statement">&quot;</span><span class="PreProc">$year</span><span class="Statement">&quot;</span> <span class="Special">-k</span> <span class="PreProc">$i</span> <span class="Special">-s</span> <span class="Statement">&quot;</span><span class="PreProc">$title</span><span class="Statement">&quot;</span> <span class="Special">-q</span> <span class="Statement">&quot;</span><span class="PreProc">$f</span><span class="Statement">&quot;</span> \
        <span class="Statement">&gt;</span>/dev/null
<span class="Identifier">}</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># rtag</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">rtag()</span>
<span class="Identifier">{</span>
    <span class="Identifier">dir</span>=<span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$dir</span><span class="Statement">&quot;</span> <span class="Statement">=</span> <span class="Constant">&quot;.&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Identifier">dir</span>=<span class="Special">`</span><span class="Statement">pwd</span><span class="Special">`</span>
    <span class="Statement">fi</span>
    <span class="Identifier">dir</span>=<span class="PreProc">${</span><span class="PreProc">dir</span><span class="Statement">##</span>*/<span class="PreProc">}</span>
    <span class="Identifier">artist</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$dir</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Special">-F</span> <span class="Statement">'</span><span class="Constant"> - </span><span class="Statement">'</span> <span class="Statement">'</span><span class="Constant">{ print $1 }</span><span class="Statement">'</span>`
      <span class="Identifier">year</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$dir</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Special">-F</span> <span class="Statement">'</span><span class="Constant"> - </span><span class="Statement">'</span> <span class="Statement">'</span><span class="Constant">{ print $2 }</span><span class="Statement">'</span>`
     <span class="Identifier">album</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$dir</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Special">-F</span> <span class="Statement">'</span><span class="Constant"> - </span><span class="Statement">'</span> <span class="Statement">'</span><span class="Constant">{ print $3 }</span><span class="Statement">'</span>`
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">artist=</span><span class="PreProc">$artist</span><span class="Constant"> year=</span><span class="PreProc">$year</span><span class="Constant"> album=</span><span class="PreProc">$album</span><span class="Statement">&quot;</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">&quot;</span><span class="PreProc">$album</span><span class="Statement">&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">return</span>
    <span class="Statement">fi</span>
    rfexec <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span> tag
<span class="Identifier">}</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># list</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">list()</span>
<span class="Identifier">{</span>
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>
    <span class="Identifier">size</span>=`stat <span class="Special">-c</span> <span class="Statement">&quot;</span><span class="Constant">%s</span><span class="Statement">&quot;</span> <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>`
    <span class="Statement">if </span><span class="Special">((</span>size <span class="Statement">==</span> <span class="Constant">0</span><span class="Special">))</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">warn: size = 0</span><span class="Statement">&quot;</span>
        <span class="Statement">return</span>
    <span class="Statement">fi</span>
    <span class="Identifier">f</span>=`basename <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>`
    <span class="Identifier">i</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">${</span><span class="PreProc">f</span><span class="Statement">:0</span><span class="Statement">:2</span><span class="PreProc">}</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Statement">'</span><span class="Constant">{ print $0 + 0 }</span><span class="Statement">'</span>`
    <span class="Identifier">title</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">${</span><span class="PreProc">f</span><span class="Statement">%</span>.<span class="PreProc">$ext</span><span class="PreProc">}</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">|</span> cut <span class="Special">-c</span>6-`
    <span class="Identifier">mp3</span>=`<span class="Statement">printf</span> %02d <span class="PreProc">$i</span>`<span class="Statement">&quot;</span><span class="Constant"> - </span><span class="PreProc">$title</span><span class="Constant">.</span><span class="PreProc">$ext</span><span class="Statement">&quot;</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ext</span> <span class="Statement">=</span> <span class="Constant">&quot;mp3&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Identifier">time</span>=<span class="Special">`mpg123 </span><span class="Special">-t</span><span class="Special"> </span><span class="Statement">&quot;</span><span class="PreProc">$mp3</span><span class="Statement">&quot;</span><span class="Special"> </span><span class="Constant">2</span><span class="Statement">&gt;&amp;1</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">time</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$time</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">]</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</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">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">[</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special"> </span><span class="Statement">|</span><span class="Special">\</span>
<span class="Special">            awk </span><span class="Special">-F</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">:</span><span class="Statement">'</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">{ print $1 * 60 + $2 }</span><span class="Statement">'</span><span class="Special">`</span>
    <span class="Statement">else</span>
        <span class="Identifier">time</span>=<span class="Special">`boxdumper </span><span class="Statement">&quot;</span><span class="PreProc">$mp3</span><span class="Statement">&quot;</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">grep</span><span class="Special"> </span><span class="Special">-m</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> duration`</span>
        <span class="Identifier">time</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$time</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">.</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</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">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">(</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special"> </span><span class="Statement">|</span><span class="Special">\</span>
<span class="Special">            awk </span><span class="Special">-F</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">:</span><span class="Statement">'</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">{ print $1 * 3600 + $2 * 60 + $3 }</span><span class="Statement">'</span><span class="Special">`</span>
    <span class="Statement">fi</span>
    <span class="Statement">if </span><span class="Special">((</span>time <span class="Statement">==</span> <span class="Constant">0</span><span class="Special">))</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">warn: time = 0</span><span class="Statement">&quot;</span>
        <span class="Statement">return</span>
    <span class="Statement">fi</span>
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">#EXTINF:</span><span class="PreProc">$time</span><span class="Constant">,</span><span class="PreProc">$artist</span><span class="Constant"> - </span><span class="PreProc">$title</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">&gt;&gt;</span><span class="Constant">00</span>.m3u
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$mp3</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">&gt;&gt;</span><span class="Constant">00</span>.m3u
<span class="Identifier">}</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># rlist</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">rlist()</span>
<span class="Identifier">{</span>
    <span class="Identifier">dir</span>=<span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$dir</span><span class="Statement">&quot;</span> <span class="Statement">=</span> <span class="Constant">&quot;.&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Identifier">dir</span>=<span class="Special">`</span><span class="Statement">pwd</span><span class="Special">`</span>
    <span class="Statement">fi</span>
    <span class="Identifier">dir</span>=<span class="PreProc">${</span><span class="PreProc">dir</span><span class="Statement">##</span>*/<span class="PreProc">}</span>
    <span class="Identifier">artist</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$dir</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Special">-F</span> <span class="Statement">'</span><span class="Constant"> - </span><span class="Statement">'</span> <span class="Statement">'</span><span class="Constant">{ print $1 }</span><span class="Statement">'</span>`
      <span class="Identifier">year</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$dir</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Special">-F</span> <span class="Statement">'</span><span class="Constant"> - </span><span class="Statement">'</span> <span class="Statement">'</span><span class="Constant">{ print $2 }</span><span class="Statement">'</span>`
     <span class="Identifier">album</span>=`<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$dir</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">|</span> awk <span class="Special">-F</span> <span class="Statement">'</span><span class="Constant"> - </span><span class="Statement">'</span> <span class="Statement">'</span><span class="Constant">{ print $3 }</span><span class="Statement">'</span>`
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">artist=</span><span class="PreProc">$artist</span><span class="Constant"> year=</span><span class="PreProc">$year</span><span class="Constant"> album=</span><span class="PreProc">$album</span><span class="Statement">&quot;</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">&quot;</span><span class="PreProc">$album</span><span class="Statement">&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">return</span>
    <span class="Statement">fi</span>
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">#EXTM3U</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">&gt;</span><span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Constant">/00.m3u</span><span class="Statement">&quot;</span>
    rfexec <span class="Statement">&quot;</span><span class="PreProc">$1</span><span class="Statement">&quot;</span> list
<span class="Identifier">}</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># myRead</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">myRead()</span>
<span class="Identifier">{</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$interactive</span> <span class="Statement">=</span> <span class="Constant">0</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">return</span> <span class="Constant">0</span>
    <span class="Statement">fi</span>

    <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="PreProc">$1</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> o <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">return</span> <span class="Constant">1</span>
    <span class="Statement">else</span>
        <span class="Statement">return</span> <span class="Constant">0</span>
    <span class="Statement">fi</span>
<span class="Identifier">}</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># main</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
myRead <span class="Statement">&quot;</span><span class="Constant">rchmod644</span><span class="Statement">&quot;</span> &amp;&amp; <span class="Statement">find</span><span class="Statement"> . </span>-type f <span class="Special">-exec</span> <span class="Statement">chmod</span> <span class="Constant">644</span> <span class="Special">{}</span> \;
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ext</span> <span class="Statement">=</span> <span class="Constant">&quot;mp3&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
    myRead <span class="Statement">&quot;</span><span class="Constant">fffb</span><span class="Statement">&quot;</span> <span class="Statement">&amp;&amp;</span> rdexec rfexec fffb
<span class="Statement">fi</span>
myRead <span class="Statement">&quot;</span><span class="Constant">dirnames</span><span class="Statement">&quot;</span>  &amp;&amp; rdexec ucfirst
<span class="Statement">find</span><span class="Statement"> . </span>-type d <span class="Special">-print</span> | <span class="Identifier">LC_ALL</span>=C <span class="Statement">sort</span> <span class="Statement">&gt;</span><span class="PreProc">$dirs</span>
myRead <span class="Statement">&quot;</span><span class="Constant">filenames</span><span class="Statement">&quot;</span> &amp;&amp; rdexec rfexec ucfirst
<span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$ext</span> <span class="Statement">=</span> <span class="Constant">&quot;mp3&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
    myRead <span class="Statement">&quot;</span><span class="Constant">tags</span><span class="Statement">&quot;</span> <span class="Statement">&amp;&amp;</span> rdexec rtag
<span class="Statement">fi</span>
myRead <span class="Statement">&quot;</span><span class="Constant">lists</span><span class="Statement">&quot;</span> &amp;&amp; rdexec rlist

<span class="Statement">rm</span> <span class="PreProc">$dirs</span>

<span class="Statement">exit</span> <span class="Constant">0</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->