<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://forum.ubuntu-fr.org/extern.php?action=feed&amp;tid=204074&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Forum Ubuntu-fr.org / [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
		<link>http://forum.ubuntu-fr.org/viewtopic.php?id=204074</link>
		<description><![CDATA[Les sujets les plus récents dans [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...).]]></description>
		<lastBuildDate>Thu, 18 Apr 2013 17:25:27 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13253631#p13253631</link>
			<description><![CDATA[<p>Merci beaucoup c&#039;est cool &lt;3</p><p>Pingouinux akbar !!!</p>]]></description>
			<author><![CDATA[dummy@example.com (linuxienubuntiste)]]></author>
			<pubDate>Thu, 18 Apr 2013 17:25:27 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13253631#p13253631</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13253141#p13253141</link>
			<description><![CDATA[<div class="quotebox"><cite>linuxienubuntiste&#160; &#160;#1688 a écrit&#160;:</cite><blockquote><div><p>Peut-on faire la même chose mais sans garder l&#039;extension des fichiers ?</p></div></blockquote></div><p>Tout est possible, mais c&#039;est plus cher…:P<br />Il faut maintenant tester que le répertoire n&#039;existe pas déjà (ce qui serait le cas si par exemple tu avaiss les fichiers <strong>image.jpg</strong> et <strong>image.gif</strong>).</p><div class="codebox"><pre><code>for fic in *
do
   [[ -d &quot;$fic&quot; ]] &amp;&amp; continue
   nom_rep=&quot;${fic%.*}&quot;
   if [[ -d &quot;$nom_rep&quot; ]]; then
      printf &quot;Fichier %s : le répertoire %s existe déjà\n&quot; &quot;$fic&quot; &quot;$nom_rep&quot;
      continue
   fi
   mkdir provi
   mv &quot;$fic&quot; provi
   mv provi &quot;$nom_rep&quot;
done</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (pingouinux)]]></author>
			<pubDate>Thu, 18 Apr 2013 16:45:38 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13253141#p13253141</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13252871#p13252871</link>
			<description><![CDATA[<p>Trop balèze, merci pingouinux. Cela fonctionne parfaitement. <img src="http://forum.ubuntu-fr.org/img/smilies/wink.png" width="15" height="15" alt="wink" /><br />Peut-on faire la même chose mais sans garder l&#039;extension des fichiers ?</p>]]></description>
			<author><![CDATA[dummy@example.com (linuxienubuntiste)]]></author>
			<pubDate>Thu, 18 Apr 2013 16:16:27 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13252871#p13252871</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13251081#p13251081</link>
			<description><![CDATA[<p>oki, je pensais que ca avait un autre sens <img src="http://forum.ubuntu-fr.org/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[dummy@example.com (Hizoka)]]></author>
			<pubDate>Thu, 18 Apr 2013 12:50:45 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13251081#p13251081</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13250931#p13250931</link>
			<description><![CDATA[<div class="quotebox"><cite>Hizoka&#160; &#160;#1685 a écrit&#160;:</cite><blockquote><div><p>ca correspond a quoi le provi pingouinux ?</p></div></blockquote></div><p>C&#039;est un répertoire provisoire. On ne peut pas lui donner le nom définitif, car il existe un fichier de même nom.<br />- Création du répertoire <strong>provi</strong><br />- Déplacement du fichier dans ce répertoire<br />- Renommage du répertoire <strong>provi</strong> avec le nom du fichier</p>]]></description>
			<author><![CDATA[dummy@example.com (pingouinux)]]></author>
			<pubDate>Thu, 18 Apr 2013 12:29:52 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13250931#p13250931</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13250891#p13250891</link>
			<description><![CDATA[<p>ca correspond a quoi le provi pingouinux ?</p>]]></description>
			<author><![CDATA[dummy@example.com (Hizoka)]]></author>
			<pubDate>Thu, 18 Apr 2013 12:23:57 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13250891#p13250891</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13250761#p13250761</link>
			<description><![CDATA[<p>bonjour a tous</p><p>1000 fichiers dans 1000 dossiers ça fait 1000 dossiers à visionner......bon courage</p>]]></description>
			<author><![CDATA[dummy@example.com (clahor)]]></author>
			<pubDate>Thu, 18 Apr 2013 12:02:08 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13250761#p13250761</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13248391#p13248391</link>
			<description><![CDATA[<p>Bonjour,<br />@linuxienubuntiste #1682</p><div class="codebox"><pre><code>for fic in *;do [[ -d &quot;$fic&quot; ]] &amp;&amp; continue; mkdir provi; mv &quot;$fic&quot; provi; mv provi &quot;$fic&quot;;done</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (pingouinux)]]></author>
			<pubDate>Thu, 18 Apr 2013 04:07:42 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13248391#p13248391</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13248311#p13248311</link>
			<description><![CDATA[<p>Je m&#039;en remet à vous, scripteurs fous. J&#039;implore votre aide, qui en plus de me faire gagner un temps précieux, m&#039;évitera de souffrir de TMS. Je dispose de plus d&#039;un millier de fichiers à trier, chacun d&#039;entre eux étant dans un même dossier. Ma demande est j&#039;imagine hyper simple pour un scripteur aguerri, simplement de pouvoir déplacer chacun des fichiers dans un dossier créer avec le nom du fichier qu&#039;il contiendra.<br />Donc en essayant d’être plus clair, un script qui créera autant de dossiers que de fichiers présent, qui renommera chacun des dossiers avec le nom des fichiers et qui ensuite déplacera les fichiers dans les dossiers.</p><p>Merci d&#039;avance pour votre aide, votre temps et de votre savoir.</p>]]></description>
			<author><![CDATA[dummy@example.com (linuxienubuntiste)]]></author>
			<pubDate>Thu, 18 Apr 2013 03:35:52 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13248311#p13248311</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13232741#p13232741</link>
			<description><![CDATA[<p>Salut à tous,</p><p>Voici un script utile pour télécharger et installer des paquetages LaTeX depuis les miroirs de ctan.org</p><div class="codebox"><pre class="vscroll"><code>#!/bin/bash

# Téléchargement et installation de packages LaTeX
# par dopsi

if [ $# -eq 1 ]
then
	echo &quot;Téléchargement et installation de $1&quot;
	echo &quot;Téléchargement depuis ctan.org...&quot;
	wget &quot;[url]http://mirrors.ctan.org/macros/latex/contrib/$1.zip[/url]&quot;&gt;/dev/null 2&gt;&amp;1

	if [ $? -ne 0 ]
	then
	echo &quot;$0: Erreur de téléchargement (0)&quot;
	exit
	fi

	echo &quot;Décompression des fichiers...&quot;
	unzip &quot;$1.zip&quot;&gt;/dev/null 2&gt;&amp;1

	echo &quot;Déplacement des fichiers dans texmf...&quot;
	mv &quot;$1/*.dvi&quot; &quot;$1/*.ps&quot; &quot;$1/*.pdf&quot; &quot;/usr/local/share/texmf/doc/latex/$1/.&quot;&gt;/dev/null 2&gt;&amp;1
	mv &quot;$1/&quot; &quot;/usr/local/share/texmf/tex/latex/.&quot;&gt;/dev/null 2&gt;&amp;1
	echo &quot;Suppression des fichiers téléchargés...&quot;
	rm &quot;$1.zip&quot;&gt;/dev/null 2&gt;&amp;1
	echo &quot;Mise à jour de la base de données...&quot;
	texhash&gt;/dev/null 2&gt;&amp;1
elif [ $# -eq 2 ]
then
	case $1 in
		&quot;-d&quot;)
			echo &quot;Téléchargement et installation de $2&quot;
			echo &quot;Téléchargement depuis ctan.org...&quot;
			wget &quot;[url]http://mirrors.ctan.org/macros/latex/contrib/$2.zip[/url]&quot;&gt;/dev/null 2&gt;&amp;1
			if [ $? -ne 0 ]
			then
			echo &quot;$0: Erreur de téléchargement (-d)&quot;
			exit
			fi
		;;

		&quot;-i&quot;)
			echo &quot;Installation $2&quot;
			echo &quot;Décompression des fichiers...&quot;
			unzip &quot;$1.zip&quot;&gt;/dev/null 2&gt;&amp;1
			echo &quot;Déplacement des fichiers dans texmf...&quot;
			mv &quot;$2/*.dvi&quot; &quot;$2/*.ps&quot; &quot;$2/*.pdf&quot; &quot;/usr/local/share/texmf/doc/latex/$2/.&quot;&gt;/dev/null 2&gt;&amp;1
			mv &quot;$2/&quot; &quot;/usr/local/share/texmf/tex/latex/.&quot;&gt;/dev/null 2&gt;&amp;1
			echo &quot;Mise à jour de la base de données...&quot;
			texhash&gt;/dev/null 2&gt;&amp;1
		;;

		&quot;-n&quot;)
			echo &quot;Téléchargement et installation de $2 (sans suppression de l&#039;archive téléchargée)&quot;
			echo &quot;Téléchargement depuis ctan.org...&quot;
			wget &quot;[url]http://mirrors.ctan.org/macros/latex/contrib/$2.zip[/url]&quot;&gt;/dev/null 2&gt;&amp;1
			if [ $? -ne 0 ]
			then
			echo &quot;$0: Erreur de téléchargement (-n)&quot;
			exit
			fi

			echo &quot;Décompression des fichiers...&quot;
			unzip &quot;$1.zip&quot;&gt;/dev/null 2&gt;&amp;1

			echo &quot;Déplacement des fichiers dans texmf...&quot;
			mv &quot;$2/*.dvi&quot; &quot;$2/*.ps&quot; &quot;$2/*.pdf&quot; &quot;/usr/local/share/texmf/doc/latex/$2/.&quot;&gt;/dev/null 2&gt;&amp;1
			mv &quot;$2/&quot; &quot;/usr/local/share/texmf/tex/latex/.&quot;&gt;/dev/null 2&gt;&amp;1
			echo &quot;Mise à jour de la base de données...&quot;
			texhash&gt;/dev/null 2&gt;&amp;1

		;;

		*)
			echo &quot;$0: Usage: ctan-download [-d|-i|-n] &lt;nom package&gt;&quot;
		;;
	esac
else
	echo &quot;$0: Usage: ctan-download [-d|-i|-n] &lt;nom package&gt;&quot;
fi</code></pre></div><p>Pensez à modifier la ligne 6</p><div class="codebox"><pre><code>ltexmf=&quot;/usr/local/share/texmf&quot;</code></pre></div><p>et la remplacer par le chemin de votre architecture texmf... <img src="http://forum.ubuntu-fr.org/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>Pour l&#039;éxécuter, sauf avec -d, il faut les droits du super-utilisateur (pour texhash et le déplacement dans le texmf)</p><p>Attention, un échec du téléchargement ne veut pas dire que le package n&#039;existe pas peut-être seulement qu&#039;il est situé autre par dans CTAN (je suis désolé de ne pas prendre en compté les exeptions mais il y en a si peu que ça n&#039;est pas la peine), donc jetez un coup d&#039;oeil sur le site avant de jeter l&#039;éponge <img src="http://forum.ubuntu-fr.org/img/smilies/wink.png" width="15" height="15" alt="wink" /></p><p>Bien à vous</p><p>Simon</p>]]></description>
			<author><![CDATA[dummy@example.com (dopsi)]]></author>
			<pubDate>Tue, 16 Apr 2013 09:29:15 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13232741#p13232741</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13148071#p13148071</link>
			<description><![CDATA[<p>Okay, je vois ça… Mais bon, j&#039;aime bien mon script :° (Mais effectivement, pas la peine de le rajouter !)</p>]]></description>
			<author><![CDATA[dummy@example.com (FelixP)]]></author>
			<pubDate>Sun, 07 Apr 2013 13:08:08 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13148071#p13148071</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13148051#p13148051</link>
			<description><![CDATA[<p>pour la creation d&#039;iso perso, il existe deja 2 tres bon logiciels sur ce forum, un de frafa et un de smo ( <a href="http://forum.ubuntu-fr.org/viewtopic.php?id=412528">http://forum.ubuntu-fr.org/viewtopic.php?id=412528</a> )</p>]]></description>
			<author><![CDATA[dummy@example.com (Hizoka)]]></author>
			<pubDate>Sun, 07 Apr 2013 13:06:21 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13148051#p13148051</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13147281#p13147281</link>
			<description><![CDATA[<p>Bonjour !<br />J&#039;ai créé pour l&#039;instant deux scripts.<br />Le premier permet de créer facilement et proprement, un périphérique (usb) bootable pour installation de Win®.<br />Le second permet, en se basant sur la page de doc-ubuntu.fr, de &quot;décompresser&quot; une iso Linux (en particulier Ubuntu) pour la personnaliser, et la recompresser. Il n&#039;est pas fini, par contre.<br />Les deux sont encore en &quot;bêta&quot; car il y a quelques problèmes à régler pour qu&#039;ils soient propres, et disponibles <a href="https://www.dropbox.com/sh/kvifjq9019q9i53/DcXpIgWyE">ici</a>.<br />Si ils sont rajoutés à la doc, je m&#039;engage à les actualiser lorsque des changements sont faits ! (je m&#039;en occupe régulièrement… <img src="http://forum.ubuntu-fr.org/img/smilies/smile.png" width="15" height="15" alt="smile" /> )<br />Bon, côté license, je m&#039;en fous un peu pour le moment… <img src="http://forum.ubuntu-fr.org/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /> Disons (cc-by-sa) ? <img src="http://forum.ubuntu-fr.org/img/smilies/smile.png" width="15" height="15" alt="smile" /><br />Linuxement,<br />Félix <img src="http://forum.ubuntu-fr.org/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[dummy@example.com (FelixP)]]></author>
			<pubDate>Sun, 07 Apr 2013 11:37:17 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13147281#p13147281</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13102411#p13102411</link>
			<description><![CDATA[<p>Bonjour, </p><p>J&#039;aimerai pouvoir utiliser ce script Python en mode fenetre avec un truc comme Zenity, mais je suis incompetent.</p><p>Voici le script qui consiste a transformer un fichier .csv en au autre utilisable par le logiciel homebank</p><p>Une fenetre qui me demanderai le fichier a convertir, le fichier&#160; de definitions et le fichier sortie<br />selon la syntaxe du script python ci-apres.</p><p>Merci pour votre aide.<br />Pierre</p><div class="codebox"><pre><code>Convert_x.x.x.py [import.csv] [output.csv] [import.def] ____

                 [import.csv] = (&quot;bank&quot;.csv)    file exported from bank
                 [output.csv] = (homebank.csv)  file to be created
                 [import.def] = (&quot;bank&quot;.def)    definition-file &quot;bank&quot; &lt;&gt; &quot;Homeb</code></pre></div><div class="codebox"><pre class="vscroll"><code>et le script ci-dessous que j&#039;ai récupéré je ne sais plus ou

#!/usr/bin/env python
#
#  Convert_v1.3
#  Copyright (c)Ton van Twuyver @ &lt;profiler1234@gmail.com&gt;
#
#  This script is written with &quot;HomeBank&quot; in mind. &lt;http://homebank.free.fr&gt;
#  Purpose:    to convert any Bank-file.csv into Homebank.csv by means of a definition-file.
#  
#  Convert.py is written in Python(2.6) and free software,
#  It is distributed in the hope that it will be useful, but comes WITHOUT ANY WARRANTY;
#  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#  See the GNU General Public License for more details.
#  You can redistribute it and/or modify it under the terms of the GNU General Public License
#  as published by the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  GNU General Public License @ &lt;http://www.gnu.org/licenses/&gt;.
#

import os
import sys
import re
print
#### CsvConvert####################################

class CsvConvert:
    &quot;&quot;&quot; reads and converts [import.csv] with [definition.def] rules &quot;&quot;&quot;
    
    def __init__(self, fromfile_, deffile_, tofile_, logfile_):
    
        # parse definition-file and create conversion-lists
        def_eof = False
        n  = 0                                  # (definition line counter)
        fld  = 0                                # (valid fields present)
        d_old   = &#039;&#039;
        hb = []                                 # homebank conversion-list
        ip = []                                 # import   conversion-list
        
        Hdl  = 0
        date = &#039;&#039;
        code = &#039;&#039;
        posneg = &#039;&#039;
        hd_acc_ln = []
        hd_bal_ln = []
        hd_len = 0
        while not def_eof:
            # Definition-file PARSER --------------------------------------
            
            n += 1                              # line count
            def_line = deffile_.readline()
            # def_eof
            if len(def_line) &lt; 1:
                def_eof = True
                
            def_line = def_line.rstrip(&#039;\n&#039;)
            d = def_line.split(&#039;;&#039;)
            # valid definition header line length is 3
            if (len(d) == 3) and (d[0] == &#039;H&#039;):
                # Extract Details # of header-lines to be skiped
                Hdl = int(d[2])                
            # valid definition field line length is 5
            if (len(d) == 5):
                # definition line contains already defined field -&gt; improper &quot;not-in-use&quot; data ?
                if (d_old == d[0]) and (int(d[2]) &lt; 0):
                    print &#039;Error in definition-file-record[%s]: field already defined !&#039;% n
                    logfile_.write(&#039;Error in definition-file-record[%s]: field already defined ! \n&#039;% n)
                else:
                    # Extract Details for Date,Paycode,Sign:
                    if (d[2].rstrip() != &#039;&#039;):
                        # Date
                        if  int(d[0]) == 0:     date = d[4]
                        # PayCode
                        elif int(d[0]) == 1:
                            code = d[4]
                            # Code-detail content needs checking:
                            #   starts with N-items of bank-code, followed by N-items of homebank-code
                            #   so, the total should always be an even-amount of items !!
                            cod_ = (d[4].split(&#039;,&#039;))
                            Even = len(cod_)-(len(cod_)/2)*2    # this is zero if Even
                            if (Even != 0):
                                print &#039;Error in definition-file: paycode detail-data ncorrect, Not correct amount of items&#039;
                                logfile_.write(&#039;Error in definition-file: paycode detail-data Incorrect, Not correct amount of items \n&#039;)
                        # Sign (Amount)
                        elif int(d[0]) == 5:    posneg = d[4]
                    # Extract Details for Header [line-number,item]
                    if int(d[2].rstrip()) &lt;= -2:
                        # store last header-line
                        hd_len = abs(int(d[2]))
                        # account-number
                        if int(d[0]) == 7:      hd_acc_ln = d[4].split(&#039;,&#039;)
                        # balance
                        elif int(d[0]) == 8:    hd_bal_ln = d[4].split(&#039;,&#039;)
                    # count valid fields def.    
                    if (int(d[2]) &gt; -1):    fld = fld + 1
                    # create conversion-lists        
                    hb.append(int(d[0]))
                    ip.append(int(d[2]))
                    
                d_old = d[0]                    # remember curr. field-data
            # rest is invalid definition line
        print hb
        print ip
        
        # parse import.csv
        n = 0                                   # (import line counter)
        imp_eof = False
        acc_old = &#039;&#039;
        bank = {                                # All known accounts
        &#039;0123456789&#039;:&#039;Bank1&#039;,
        &#039;0987654321&#039;:&#039;Bank2&#039;
        }
        while not imp_eof:
            # Import(Bank)-file PARSER --------------------------------------
            
            n += 1                              # line count
            line = fromfile_.readline()
            # eof (import)
            if len(line) == 0:
                imp_eof = True
                break
                
            # Skip record-lines in Header
            if (Hdl &lt; n):
                # Cleanup record-line
                line = line.rstrip(&#039;\r\n&#039;)          # get rid of CRLF
                line = line.replace(&quot;&#039;&quot;,&#039;&quot;&#039;)        # harmonize all quotes &quot;&quot;
                ln = len(line)

                # problems encountered spliting lines:
                #   1   Some (not all) fields are with quotes
                #       1a      text between quotes
                #       1b      numbers between quotes  
                #   2   comma separated fields contains comma (e.g. in amounts)
   
                CsvConvert.fail = 0
                # Find out Separator type and split
                line_c = line.replace(&#039;,&#039;,&#039;&#039;)
                line_s = line.replace(&#039;;&#039;,&#039;&#039;)
                
                if len(line_c) &gt; len(line_s):       # semicolon separator (comma&#039;s in field allowed)
                    rec = line.split(&#039;;&#039;)
                else:                               # comma separator (comma&#039;s in field NOT allowed)
                    # Find out if quotes are present, and in pairs
                    line_q = line.replace(&#039;&quot;&#039;,&#039;&#039;)
                    qt = (len(line)-len(line_q))
                    # Check pairs
                    if (qt-2*int(qt/2)) != 0:
                        CsvConvert.fail = n         # Error =&gt; Store record-/line-number
                        logfile_.write(&#039;Error in record[%s]: Quotes not in pairs\n&#039;% n)
                    else:
                        # if between quotes a comma is present, change to &#039;.&#039;
                        # remove quotes after checking
                        Quotes = True
                        print &quot;  &quot; + line
                        while Quotes:
                            ln = len(line)
                            q1 = line.find(&#039;&quot;&#039;)
                            q2 = line.find(&#039;&quot;&#039;,q1+1)
                            #print q1,q2
                            if (q1 &gt; 0) and (q2 &gt; 0):
                                l1 = line[q1:q2+1].replace(&quot;,&quot;,&#039;.&#039;)
                                line = line[0:q1] + l1.replace(&#039;&quot;&#039;,&#039;&#039;) + line[q2+1:ln]
                            else:
                                Quotes = False
                                
                        rec = line.split(&#039;,&#039;)       # Now it is safe to split

                # Cleanup all quotes left behind
                for i in range(len(rec)):
                    rec[i] = rec[i].strip(&#039;&quot;&#039;)
                    
                # Header present (ONLY for single account file)
                if hd_len &gt; 0:
                    # accountnumber
                    if n == int(hd_acc_ln[0]):
                        n_ac = int(hd_acc_ln[1])
                        # filter out only digits (account-number)
                        # and make accountnumber 10 char.long
                        ac = re.sub(&#039;[^0-9]&#039;,&#039;&#039;,rec[n_ac])
                        if len(ac) &lt; 10:   ac = (10 - len(ac))*&#039;0&#039; + ac
                        #print &quot;&lt;&gt;&quot;, ac, bank[ac]
                        tofile_.write(&#039;%s;%s\n&#039;% (ac,bank[ac]))
                    # balance (for future use)
                    if n == int(hd_bal_ln[0]):
                        n_bc = int(hd_bal_ln[1])
                        bc = rec[n_bc]
                        bc = ParseAmount(bc)
                        #print &quot;&lt;&gt;&quot;, float(bc)

                # Check account-record-length in relation to def, log only error outside header
                if ((fld &gt;= len(rec)) or (max(ip) &gt;= len(rec))):
                    CsvConvert.fail = n                     # Error =&gt; Store record-/line-number
                    if (n &gt; hd_len):
                        logfile_.write(&#039;Error in record[%s]: Field(s) missing\n&#039;% n)
                
                if (CsvConvert.fail == 0):                  # &gt;&gt;&gt;&gt;&gt; skip record with error !
                    # Construct Homebank records
                    hb_old  = 0
                    record  = &#039;&#039;
                    am = &#039;&#039;
                    for j in range(len(hb)):
                        h = hb[j]        
                        b = ip[j]
                        rec_new = rec[b]
                        # ________________conversions
                        # &quot;date&quot;
                        if (h == 0):                        
                            dd = date.find(&#039;DD&#039;)
                            mm = date.find(&#039;MM&#039;)
                            yy = date.find(&#039;YYYY&#039;)
                            rec_new = &#039;%s-%s-%s&#039;% (rec[b][dd:(dd+2)],rec[b][mm:(mm+2)],rec[b][yy:(yy+4)])
                        # &quot;paycode&quot;
                        if (h == 1):
                            rec_new = &#039;&#039;
                            # empty code
                            if (code == &#039;&#039;):
                                print &#039;&gt;&gt;&gt;&gt;&gt; Empty Paycode: &#039; + rec[b]
                                logfile_.write(&#039;Empty Paycode &quot;%s&quot; in record[%s]\n&#039;% (rec[b],n))
                            else:    
                                # Unknown paycode (Not in .def)
                                if code.find(rec[b]) &lt; 0:
                                    print &#039;&gt;&gt;&gt;&gt;&gt; Unknown Paycode: &#039; + rec[b]
                                    logfile_.write(&#039;Unknown Paycode &quot;%s&quot; in record[%s]\n&#039;% (rec[b],n))
                                # Known paycode (present in def)
                                else:
                                    k = 0
                                    cd = code.split(&#039;,&#039;)
                                    offset = len(cd)/2
                                    for c in cd:
                                        if c == rec[b]:     rec_new = cd[k + offset]
                                        k += 1                                    
                        # &quot;amount&quot;
                        if (h == 5):
                            #print &quot;&lt;&gt;&quot;, rec[b]
                            rec_new = &#039;&#039;
                            # Amount
                            if (am == &#039;&#039;):
                                am = rec[b]
                                am = ParseAmount(am)
                                if not ParseAmount.valid:
                                    print &#039;Error in record[%s]: Amount-Field corrupt\n&#039;% n
                                    logfile_.write(&#039;Error in record[%s]: Amount-Field corrupt\n&#039;% n)
                                    break
                            # Sign
                            elif (posneg != &#039;&#039;):                    # Dualline def.
                                pn = posneg.split(&#039;,&#039;)
                                if   rec[b] == pn[0]:   am = &#039;-%s&#039;% am
                                elif rec[b] == pn[1]:   pass
                                rec_new = am
                            # No-sign
                            if posneg == &#039;&#039;: rec_new = am           # Single line def.
                            
                        # ___________________assemble output-record
                        # skip if this field indicates [Not used] or [Header]
                        if (ip[j] &gt;= 0):
                            # [date]
                            if (h == 0):
                                record = rec_new
                            # [paymode]    
                            elif (h == 1):
                                record = &#039;%s;%s&#039;% (record,rec_new)
                            # [info -&gt; offset-account]
                            elif (h == 2):
                                # filter out only digits (account-number)
                                # and make accountnumber 10 char.long
                                rec_new = re.sub(&#039;[^0-9]&#039;,&#039;&#039;,rec_new)
                                if len(rec_new) &lt; 10:   rec_new = (10 - len(rec_new))*&#039;0&#039; + rec_new

                                if (int(rec_new) &gt; 0):
                                # if (len(rec_new) != 0) and (int(rec_new) &gt; 0):
                                    record = &#039;%s;%s&#039;% (record,rec_new)
                                else:
                                    record = &#039;%s;&#039;% record
                            # [payee]
                            elif (h == 3):
                                record = &#039;%s;%s&#039;% (record,rec_new)
                            # [description]
                            elif (h == 4):
                                # Combine multiple &quot;not empty&quot; description Bank-records
                                if (hb_old == h):
                                    if (len(rec_new) != 0):
                                        record = &#039;%s_%s&#039;% (record,rec_new)
                                    else:
                                        pass
                                # First description Bank-record
                                else:
                                    hb_old = h
                                    if (len(rec_new) != 0):
                                        record = &#039;%s;%s&#039;% (record,rec_new)
                                    # empty
                                    else:
                                        record = &#039;%s;&#039;% record
                            # [amount]
                            elif (h == 5):
                                if (len(rec_new) != 0):
                                    record = &#039;%s;%s&#039;% (record,rec_new)
                                else:
                                    pass
                            # [category]
                            elif (h == 6):
                                record = &#039;%s;%s&#039;% (record,rec_new)
                            # [account]    
                            # NOT IMPLEMENTED IN HOMEBANK CSV-import
                            #       multi accounts import: sequential account listing
                            #       at top of accountlist extra line with account-name
                            #       format: account-number; &quot;Homebank account-name&quot;
                            #       Needs Homebank 4.3 &quot;import.c&quot; adaptation (TvT(c)2010)
                            elif (h == 7):
                                # filter out only digits (account-number)
                                # and make accountnumber 10 char.long
                                rec_new = re.sub(&#039;[^0-9]&#039;,&#039;&#039;,rec_new)
                                if len(rec_new) &lt; 10:   rec_new = (10 - len(rec_new))*&#039;0&#039; + rec_new
                                # detect next account
                                if (rec_new != acc_old):
                                    acc_old = rec_new
                                    try:
                                        #print &quot;&lt;&gt;&quot;, rec_new,bank[rec_new]
                                        tofile_.write(&#039;%s;%s\n&#039;% (rec_new,bank[rec_new]))
                                    except KeyError:
                                        #print &#039;Unknown/New account number&#039;
                                        tofile_.write(&#039;%s;%s\n&#039;% (rec_new,&#039;New_account&#039;))
                            # [balance]            
                            # NOT IMPLEMENTED IN HOMEBANK CSV-import
                            #       Listed Balance value before/after transaction ?
                            #       Needs further investigation and Homebank 4.3 &quot;import.c&quot; adaptation
                            # TODO  Needs Homebank 4.3 &quot;import.c&quot; adaptation
                            elif (h == 8):
                                # For future use, now just print available Balance-value ....
                                bal = re.sub(&#039;[^0-9.-]&#039;,&#039;&#039;,rec_new)
                                print float(bal) + float(am)

                        # Field not available [-1]
                        elif (h &lt; 7) and (ip[j] == -1):
                            record = &#039;%s;&#039;% record
                            
                    #print record
                    tofile_.write(&#039;%s\n&#039;% record)

#### ParseAmount ####################################

def ParseAmount(am):
    &quot;&quot;&quot; check and harmonize grouping and decimal-point
          outputs amount and valid-flag(true/false)
    &quot;&quot;&quot;

    ParseAmount.valid = True
    # filter
    am = re.sub(&#039;[^0-9,.-]&#039;,&#039;&#039;,am)
    # integers(any number).fraction(0..2) 
    # find decimal point
    frac1 =len(am)-am.find(&#039;.&#039;)
    frac2 =len(am)-am.find(&#039;,&#039;)
    # No grouping &amp; No fraction / decimal-point
    if (frac1 == frac2):
        am = &#039;%s.00&#039;% am
    # xxx,xxx,xxx.xx    comma-grouping, dot-decimal
    elif (frac1 &lt; 4) and (frac1 &gt; 0):   
        am = am.replace(&#039;,&#039;,&#039;&#039;)
    # xxx.xxx.xxx,xx    dot-grouping,   comma-decimal
    elif (frac2 &lt; 4) and (frac2 &gt; 0):
        am = am.replace(&#039;.&#039;,&#039;&#039;)
        am = am.replace(&#039;,&#039;,&#039;.&#039;)        # harmonize decimal-point
    # grouping &amp; No fraction / decimal-point
    else:
        am = am.replace(&#039;,&#039;,&#039;&#039;)
        am = am.replace(&#039;.&#039;,&#039;&#039;)
        am = &#039;%s.00&#039;% am
    # check validity result
    if (len(am) - am.find(&#039;.&#039;)) != 3:
        ParseAmount.valid = False
    return am
                
#### Convert ##########################################
      
class convert:
    &quot;&quot;&quot; Converts &lt;unknown&gt; csv-file &quot;&quot;&quot;
    # 1- where are the csv-files?                   =&gt;  commandline
    # 2- Convert via definition-file 
    # 3- what is csv-separator: comma, semicolon ?
    # 4- Skip &quot;corrupted&quot; bank-file records
    # 5- Include multi-accounts in output.csv       (NOT IMPLEMENTED IN HOMEBANK CSV-import)
    # 6- Include balance info in output.csv         (NOT IMPLEMENTED IN HOMEBANK CSV-import)
    # 7- Log all conversion process-items
      
    def __init__(self):
    
        error = &#039;Input error!____ Type ./Convert_x.x.x.py [import.csv] [output.csv] [import.def] ____\n\n\
                 [import.csv] = (&quot;bank&quot;.csv)    file exported from bank\n\
                 [output.csv] = (homebank.csv)  file to be created\n\
                 [import.def] = (&quot;bank&quot;.def)    definition-file &quot;bank&quot; &lt;&gt; &quot;Homebank&quot;\n\n\
                 Logging conversion process -&gt; log.txt\n&#039;
        homebank = [&#039;date&#039;,&#039;paymode&#039;,&#039;info&#039;,&#039;payee&#039;,&#039;description&#039;,&#039;amount&#039;,&#039;category&#039;]  # 4.3
        
        if (len(sys.argv) != 4):
            print error
            exit(1)

        if os.path.isfile(sys.argv[1]):
            fromfile = open(sys.argv[1],&#039;r&#039;)
        else:
            print &#039;\nInput error!____ import.csv: &#039; + sys.argv[1] + &#039; does not exist / cannot be opened !!\n&#039;
            exit(1)
            
        try:
            tofile   = open(sys.argv[2],&#039;w&#039;)
        except:
            print &#039;\nInput error!____ output.csv: &#039; + sys.argv[2] + &#039; cannot be created !!\n&#039;
            exit(1)
            
        if os.path.isfile(sys.argv[3]):
            deffile = open(sys.argv[3],&#039;r&#039;)
        else: 
            print &#039;\nInput error!____ import.def: &#039; + sys.argv[3] + &#039; does not exist / cannot be opened !!\n&#039;
            exit(1)
            
        logfile  = open(&#039;log.txt&#039;, &#039;w&#039;)
        
        logfile.write(&#039;Opening import     %s\n&#039; % fromfile)
        logfile.write(&#039;        export     %s\n&#039; % tofile)
        logfile.write(&#039;        definition %s\n&#039; % deffile)

        CsvConvert(fromfile, deffile, tofile, logfile)
                
        logfile.write(&#039;Closing files\n&#039;)
        logfile.close()
        fromfile.close()
        tofile.close()
        deffile.close()

if __name__ == &quot;__main__&quot;:
    convert()</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (caracolito)]]></author>
			<pubDate>Tue, 02 Apr 2013 16:49:39 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13102411#p13102411</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13054051#p13054051</link>
			<description><![CDATA[<p>re bonjour,</p><p>voici les scripts que j&#039;utilise pour faire la conversion à la volé de vidéo.<br />je sais que ce type de script est en abondance sur le réseau cependant je n&#039;ai jamais trouvé mon bonheur.</p><p>en quelques mots :<br /> - traitement en masse<br /> - répertoire source vers cible<br /> - choix de l&#039;extension source<br /> - selection du français pour les sources avec plusieurs pistes audio<br /> - choix du nombre de conversion à faire en simultané<br /> - vérification de la présence des fichiers avant la conversion (en cas de traitement en plusieurs lot...)<br /> - création de plusieurs fichiers de log (fichier erreur, réussi, log... =&gt; le but pour moi est de faire un tail -f sur le log de mon choix durant l&#039;execution)</p><p>le fonctionnement est le suivant : un script est appelé avec comme paramètre le nombre de thread (je sais que ce n&#039;est pas un vrai thread...) l&#039;extension cherché, le répertoire source puis la cible</p><p>ce script va appelé un autre script (l&#039;évolution aurait été de s&#039;appelé soit même en récursif!! je suis trop fainéant pour le faire en ce moment lol)</p><p>si le fichier à convertir existe déjà en avi dans l&#039;arborescence cible alors la conversion n&#039;est pas faite (et la log des fichiers déjà présent est valorisé)<br />place au code :<br />le script à appeler</p><div class="codebox"><pre><code>#!/bin/bash
if [ $# != 4 ] # Test le nombres de paramètre passé au shell
then
	echo erreur dans la saisie des paramètres;
	echo &quot;essayer : sh $0 nbTread /repertoire_source /repertoire_cible extension&quot;;
	exit 0 # Quitte le shell
elif [ ! -d &quot;$2&quot; -o ! -d &quot;$3&quot; ] # Test que les paramètres soient bien des repertoires
then
	echo il faut renseigner des répertoirs dans les paramètres;
	exit 0
fi

#Paramètres du shell
repertoirSource=&quot;${2%/}/&quot; # Supprime le slash de la fin si il existe puis en ajoute un (pour éviter d&#039;en avoir 2 si l&#039;utilisateur l&#039;avait mis)
repertoirCible=&quot;${3%/}/&quot;
extension=&quot;${4}&quot;
UserValueThread=$1

  # start threads
  for i in $(seq 1 $UserValueThread)
  do
    	echo &quot;started instance no: $i&quot;
  	./filesToAvi.sh $repertoirSource $repertoirCible $extension true &amp;

 	sleep 2
  done</code></pre></div><p>le second script qui se nomme filesToAvi.sh</p><div class="codebox"><pre class="vscroll"><code>#!/bin/bash

if [ $# != 4 ] # Test le nombres de paramètre passé au shell
then
	echo erreur dans la saisie des paramètres;
	echo &quot;essayer : sh $0 /repertoire_source /repertoire_cible extension true/false&quot;;
	echo &quot;true veut dire création de l&#039;arboréssence de la source vers la cible&quot;;
	exit 0 # Quitte le shell
elif [ ! -d &quot;$1&quot; -o ! -d &quot;$2&quot; ] # Test que les paramètres soient bien des repertoires
then
	echo il faut renseigner des répertoirs dans les paramètres;
	exit 0
fi
#Paramètres du shell
repertoirSource=&quot;${1%/}/&quot; # Supprime le slash de la fin si il existe puis en ajoute un (pour éviter d&#039;en avoir 2 si l&#039;utilisateur l&#039;avait mis)
repertoirCible=&quot;${2%/}/&quot;
extension=&quot;${3}&quot;
creatFolder=&quot;${4}&quot;
cible=&quot;${repertoirCible}&quot;
#Fichiers de log pour exploitation future
log=&quot;$repertoirCible&quot;log.txt
existant=&quot;$repertoirCible&quot;existant.txt
absent=&quot;$repertoirCible&quot;absent.txt
erreur=&quot;$repertoirCible&quot;erreur.txt

flag=&quot;non&quot; #Drapeau pour communiquer entre les fonctions
maintenant=$(date) #Pour afficher l&#039;heure et la date dans le fichier de log
#Fonction pour mettre à jour le repertoire à créer
actualiseRepertoireCible(){
if [ $creatFolder = &quot;true&quot; ] # si je dois reproduire l&#039;arboressence
cible=$(echo &quot;${1}&quot;|sed &quot;s#${repertoirSource}#${repertoirCible}#g&quot;) # remplace le repertoire source par la cible
cible=&quot;${cible%/}/&quot;
then
	if [ ! -d &quot;${cible}&quot; ] # Test si le repertoire existe
	then 
	# si il n&#039;existe pas alors je le cré
	mkdir -p &quot;${cible}&quot;
	fi
fi
}
#Fonction pour mettre à jour la date et heure dans la variable.
actualiseTimeOfTreatment() {
	maintenant=$(date &#039;+%Y-%m-%d %H:%M:%S&#039;)
}
#Fonction métier besoin de ripper des fichiers mkv en avi avec une selection automatique de la langue francaise si présente
actionMKVtoAVI() {
	fichier=&quot;${1##*/}&quot; #Récupération du nom de fichier passé en paramètre (idem que d&#039;utiliser basename)
	echo &quot;${maintenant};${1};demande de conversion.&quot; &gt;&gt; &quot;$log&quot;;
		# recherche le mapping des pistes audio FR via la commande ffmpeg -i
		# redirection de la sortie 2 vers la 1 car ffmpeg n&#039;affiche pas les informations à l&#039;écran via la sortie standard.
		# recuperation du resultat de grep dans la variable.
	audio=`/var/subsonic/transcode/ffmpeg -i  &quot;$1&quot; 2&gt;&amp;1| grep &#039;(fre): Audi&#039;`
		# supprime de la variable &#039;Stream #&#039; ainsi que tous ce qui le precede.
	audio=&quot;${audio##*Stream #}&quot;
		# supprime de la variable &#039;(fre)&#039; et tous ce qui suit
	audio=${audio%(fre)*}
		# la variable contien à ce moment là soit le mappage attendu pour le francais (ex: &#039;0.1&#039;) soit rien
		# même principe pour le mappage de la vidéo car pour mapper en manuel dans ffmpeg il faut lui donner l&#039;ensemble des flux.
		# recherche le mapping de la video via la commande ffmpeg -i
	video=`/var/subsonic/transcode/ffmpeg -i  &quot;$1&quot; 2&gt;&amp;1| grep &#039;: Video&#039;`
	video=&quot;${video##*Stream #}&quot;
	video=${video%%(*}
		# si piste audio FR détecté alors force le map dans la conversion.
		# pas de test sur la variable vidéo car en cas d&#039;erreur c&#039;est ffmpeg qui prendra en charge de mapper automatiquement la première piste vidéo.
	if [&quot;${audio}&quot; -e &quot;&quot;]
	then
		echo &quot;${maintenant};${1};Pas de piste audio française trouvée.&quot; &gt;&gt; &quot;$log&quot;;
		echo &quot;${maintenant};${1};ffmpeg -i $1 -async 1 -s 720x576 -r 24 -ab 128k -b 1200k -aspect 16:9 -ac 2 -v 0 -f avi ${cible}${fichier%.*}.avi&quot; &gt;&gt; &quot;$log&quot;;
		/var/subsonic/transcode/ffmpeg -i &quot;$1&quot; -async 1 -s 720x576 -r 24 -ab 128k -b 1200k -aspect 16:9 -ac 2 -v 0 -f avi &quot;${cible}${fichier%.*}&quot;.avi;
	else
		echo &quot;${maintenant};${1};Piste audio française trouvée.&quot; &gt;&gt; &quot;$log&quot;;
		echo &quot;${maintenant};${1};ffmpeg -i $1 -async 1 -s 720x576 -r 24 -ab 128k -b 1200k -aspect 16:9 -map ${video} -map ${audio} -ac 2 -v 0 -f avi ${cible}${fichier%.*}.avi;&quot; &gt;&gt; &quot;$log&quot;;
		/var/subsonic/transcode/ffmpeg -i &quot;$1&quot; -async 1 -s 720x576 -r 24 -ab 128k -b 1200k -aspect 16:9 -map &quot;${video}&quot; -map &quot;${audio}&quot; -ac 2 -v 0 -f avi &quot;${cible}${fichier%.*}&quot;.avi;
	fi 
}
actionScript() {
actualiseTimeOfTreatment #demande de mise à jour de la variable temps (maintenant)
if [ &quot;$flag&quot; = &quot;non&quot; ] #Si fichier non trouvé
	then 	
		echo &quot;$1&quot; &gt;&gt; &quot;$absent&quot;;
		actionMKVtoAVI &quot;$1&quot;
	else	#Si fichier trouvé	
		echo &quot;${maintenant};${1};${flag}&quot; &gt;&gt; &quot;$log&quot; ;
		echo &quot;$1&quot; &gt;&gt; &quot;$existant&quot;;
	fi 
	return
}
rechercheCible() { #Dans le cas des boucles for le résultat d&#039;un repertoir n&#039;est pas fini par un &#039;/&#039; c&#039;est pourquoi je l&#039;ajoute apres ${u}&quot;/&quot;
	for u in &quot;$1&quot;* ;do  #Boucle sur tout le contenu du repertoir passé en paramètre
		if [ -d &quot;$u&quot; ] #Si repertoire
		then
			if [ -f &quot;${u}&quot;/&quot;$2&quot; ] #si le fichier existe dans le répertoire 
			then
				flag=&quot;${u}&quot;/&quot;$2&quot;  #valorise le flag pour dire que le fichier est présent					
				return  #quitte la fonction
			else
				rechercheCible &quot;${u}/&quot; &quot;$2&quot; #sinon explore le contenu de ce nouveau répértoire
			fi
		fi
	done
	return #Si je sorts ici alors c&#039;est que je n&#039;ai rien trouvé...
}
rechercheSource() {
	for i in &quot;$1&quot;* ;do #Boucle sur l&#039;ensemble des fichiers 
		flag=&quot;non&quot; #Passe le drapeau à non avant de faire la recherche dans le repertoire cible
		if [ -d &quot;$i&quot; ] #Si repetoire
		then 
			rechercheSource &quot;${i}/&quot;  #Recherche dans le sous répertoire
		else
			currentExtension=&quot;${i##*.}&quot; #Extraction de l&#039;extension
			nom=&quot;${i##*/}&quot;	#extraction du nom de fichier		
			if [ &quot;$currentExtension&quot; = &quot;${extension}&quot; ]
			then	
				if [ -f &quot;${repertoirCible}${nom%.*}&quot;.avi ] #si le fichier existe dans le répertoire cible
				then
					flag=&quot;${repertoirCible}${nom%.*}&quot;.avi  #valorise le flag pour dire que le fichier est présent
					actionScript &quot;$i&quot; #Demande l&#039;execution d&#039;une action	
				else
					rechercheCible &quot;$repertoirCible&quot; &quot;${nom%.*}&quot;.avi #recherche sa présence dans les sous répértoires Cible (apres avoir changé son extension)
					if [ &quot;$flag&quot; = &quot;non&quot; ] #Si fichier non trouvé
					then
						actualiseRepertoireCible &quot;$1&quot; #Afin de créer le repertoire cible.	
					fi		
					actionScript &quot;$i&quot; #Demande l&#039;execution d&#039;une action
				fi
			else
				echo &quot;${maintenant};${1};n&#039;est pas un fichier $extension&quot;&gt;&gt; &quot;$log&quot;;
				echo &quot;$i&quot; &gt;&gt; &quot;$erreur&quot;;
			fi
		fi
	done
	return
}

rechercheSource &quot;$repertoirSource&quot; 

echo &quot;Job&#039;s done by Tom&quot;;</code></pre></div><p>dans ce dernier code j&#039;ai précisé l&#039;adresse de mon ffmpeg car j&#039;execute ce code sur un serveur d&#039;application qui utilise son propre ffmpeg il vous faudra la modifier.<br /> changer</p><div class="codebox"><pre><code>/var/subsonic/transcode/ffmpeg </code></pre></div><p>par </p><div class="codebox"><pre><code>ffmpeg</code></pre></div><p>Cordialement,<br />Thomas R</p>]]></description>
			<author><![CDATA[dummy@example.com (nassertom)]]></author>
			<pubDate>Fri, 29 Mar 2013 04:12:17 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13054051#p13054051</guid>
		</item>
	</channel>
</rss>
