<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.nozav.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Humus numericus - script</title>
  <link>http://blog.nozav.org/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Wed, 02 Jul 2008 11:28:08 +0200</pubDate>
  <copyright>Documents sous licence Creative commons</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Script shell de transfert de photos</title>
    <link>http://blog.nozav.org/post/2007/12/06/Script-shell-de-transfert-de-photos</link>
    <guid isPermaLink="false">urn:md5:588f854d8189584b022328c1522933ec</guid>
    <pubDate>Thu, 06 Dec 2007 00:14:00 +0100</pubDate>
    <dc:creator>Juba</dc:creator>
        <category>Linux, Debian, etc.</category>
        <category>debian</category><category>linux</category><category>photo</category><category>script</category>    
    <description>    &lt;p&gt;Pas sûr que ça en vaille la peine, mais je me permets quand même de mettre en ligne le petit script bash que j'utilise pour transférer les photos depuis mon appareil numérique vers mon PC. Le script en question part du principe que l'appareil est reconnu comme un périphérique de stockage de masse USB et qu'il est automatiquement monté au point de montage indiqué par la variable &lt;code&gt;mount_point&lt;/code&gt;. Il faut également renseigner les variable &lt;code&gt;source_dir&lt;/code&gt; (chemin vers le répertoire dans lequel se trouve les photos à partir du point de montage) et &lt;code&gt;cible_dir&lt;/code&gt; (emplacement des photos sur le PC). Vous aurez également besoin du paquet &lt;code&gt;libjpeg-progs&lt;/code&gt; pour avoir la commande &lt;code&gt;exifautotran&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Une fois que vous avez tout ça, vous aurez juste à brancher votre appareil et à lancer le script. Celui-ci s'occupera de monter le périphérique, de copier chaque image dans un répertoire nommé selon la date de prise de la photo (au format &lt;code&gt;/home/photos/2007/12&lt;/code&gt; par exemple) et d'effectuer une rotation en fonction de l'orientation horizontale ou verticale contenue dans les données EXIF.&lt;/p&gt;


&lt;pre&gt;
#!/bin/sh                                                           
                                                                    
mount_point=/mnt/photo
source_dir=dcim/100km028 
cible_dir=/home/photos

mount $mount_point
for i in $mount_point/$source_dir/*.jpg; do  
        img=`basename $i`
        annee=`stat -c %y $i | cut -d '-' -f 1`
        mois=`stat -c %y $i | cut -d '-' -f 2`
        cible=$cible_dir/$annee/$mois
        if [ ! -d $cible ];
        then
                mkdir -p $cible
        fi      
        echo &amp;quot;Copie de $i vers $cible/$img&amp;quot;
        cp -i $i $cible/$img
        exifautotran $cible/$img
done;   
sleep 2s
umount $mount_point
&lt;/pre&gt;


&lt;p&gt;Comme d'hab en ces lieux, vous constaterez que c'est du vite fait&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.nozav.org/post/2007/12/06/Script-shell-de-transfert-de-photos#comment-form</comments>
      <wfw:comment>http://blog.nozav.org/post/2007/12/06/Script-shell-de-transfert-de-photos#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.nozav.org/feed/rss2/comments/208</wfw:commentRss>
      </item>
    
  <item>
    <title>Comparaison d'un script simple en Perl, Python et Ruby</title>
    <link>http://blog.nozav.org/post/2006/08/24/59-comparaison-d-un-script-simple-en-perl-python-et-ruby</link>
    <guid isPermaLink="false">urn:md5:20caba3addf4b6a47ff026ec563dfa8a</guid>
    <pubDate>Thu, 24 Aug 2006 01:03:16 +0000</pubDate>
    <dc:creator>Juba</dc:creator>
        <category>Linux, Debian, etc.</category>
        <category>perl</category><category>python</category><category>ruby</category><category>script</category>    
    <description>    &lt;p&gt;Tiens, suite à une question d'un collègue de boulot aujourd'hui, je me suis amusé à comparer la manière de faire une tâche assez simple dans trois langages de script différents. L'objectif est d'afficher le chemin complet de tous les répertoires contenus (récursivement) dans un répertoire donné (en l'occurrence &lt;code&gt;/var/log&lt;/code&gt;). Je trouve le résultat assez représentatif des particularités des différents langages&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;En Python&lt;/strong&gt;&lt;/p&gt;


&lt;pre&gt;import os
from os.path import join
for root, dirs, files in os.walk('/var/log'):
    for name in dirs:
        print join(root, name)&lt;/pre&gt;


&lt;p&gt;C'est pas forcément super intuitif (faut comprendre que la fonction &lt;code&gt;os.walk&lt;/code&gt; renvoit un &lt;em&gt;tuple&lt;/em&gt; avec le répertoire racine, les répertoires contenus et les fichiers contenus de chaque sous-répertoire parcouru. Mais c'est assez efficace.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;En Perl&lt;/strong&gt;&lt;/p&gt;


&lt;pre&gt;use File::Find;
find sub { print $File::Find::name, &quot;
&quot; if -d } , '/var/log';&lt;/pre&gt;


&lt;p&gt;Ah bah c'est sûr, difficile de faire plus bref. Mais c'est pas forcément évident du premier coup d'oeil, entre l'utilisation d'une référence à une fonction en argument de &lt;code&gt;find&lt;/code&gt;, ou celui du test &lt;code&gt;-d&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;En Ruby&lt;/strong&gt;&lt;/p&gt;


&lt;pre&gt;require 'find'
Find.find('/var/log') { |path| puts path if File.directory?(path) }&lt;/pre&gt;


&lt;p&gt;Et voilà. Simple, lisible, compact, compréhensible (du moins si on a compris le concept de bloc et d'itérateur). En un mot&amp;nbsp;: &lt;em&gt;é-lé-gant&lt;/em&gt;.&lt;/p&gt;


&lt;p&gt;Bon, allez, je suis pas tout à fait objectif, je vous l'accorde...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.nozav.org/post/2006/08/24/59-comparaison-d-un-script-simple-en-perl-python-et-ruby#comment-form</comments>
      <wfw:comment>http://blog.nozav.org/post/2006/08/24/59-comparaison-d-un-script-simple-en-perl-python-et-ruby#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.nozav.org/feed/rss2/comments/57</wfw:commentRss>
      </item>
    
  <item>
    <title>Textile mode</title>
    <link>http://blog.nozav.org/post/2006/04/05/48-textile-mode</link>
    <guid isPermaLink="false">urn:md5:5b5fc1bddab80807be5a09dd276be9e3</guid>
    <pubDate>Wed, 05 Apr 2006 09:33:05 +0000</pubDate>
    <dc:creator>Juba</dc:creator>
        <category>Emacs, Gnus</category>
        <category>emacs</category><category>script</category><category>textile</category>    
    <description>    &lt;p&gt;Youpi, youpla, je viens de créer mon premier &lt;em&gt;major mode&lt;/em&gt; pour Emacs. C'est un mode visant à faciliter l'écriture de document suivant la syntaxe de balisage Textile.&lt;/p&gt;


&lt;p&gt;Pour l'instant il ne fait pas grand-chose, c'est à dire seulement de la coloration syntaxique, et il est en version vraiment alpha, pas plus testée que ça. N'hésitez pas à me faire remonter tout bug ou commentaire.&lt;/p&gt;


&lt;p&gt;La dernière version du script peut être téléchargée là&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://svn.nozav.org/scripts/elisp/textile-mode/textile-mode.el&quot;&gt;http://svn.nozav.org/scripts/elisp/textile-mode/textile-mode.el&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Pour plus d'informations sur Textile, vous pouvez consulter&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.textism.com/tools/textile/&quot;&gt;http://www.textism.com/tools/textile/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://hobix.com/textile/&quot;&gt;http://hobix.com/textile/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://blog.nozav.org/post/2006/04/05/48-textile-mode#comment-form</comments>
      <wfw:comment>http://blog.nozav.org/post/2006/04/05/48-textile-mode#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.nozav.org/feed/rss2/comments/46</wfw:commentRss>
      </item>
    
  <item>
    <title>erc2html</title>
    <link>http://blog.nozav.org/post/2006/01/07/39-erc2html</link>
    <guid isPermaLink="false">urn:md5:9a353f19ff10d643d4a2aa7152e5ab3c</guid>
    <pubDate>Sat, 07 Jan 2006 23:50:51 +0000</pubDate>
    <dc:creator>Juba</dc:creator>
        <category>Emacs, Gnus</category>
        <category>emacs</category><category>ruby</category><category>script</category>    
    <description>    &lt;p&gt;Je viens de pondre un tout petit script en Ruby qui me permet de transformer un log de discussion IRC enregistré sous ERC (&lt;em&gt;Emacs Relay Chat&lt;/em&gt;) en fichier HTML pour publication. Le script supprime les sauts de ligne superflus, supprime les messages serveur et colorise deux trois bricoles. C'est loin d'être parfait, mais si ça peut être utile à quelqu'un...&lt;/p&gt;



&lt;pre&gt;require &quot;cgi&quot;

str = IO.read(&quot;/home/julien/lautre_20060107.log.txt&quot;)

titre = &quot;Titre de la page&quot;
charset = &quot;UTF-8&quot;

head = &amp;lt;&amp;lt;EOL
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;#{titre}&amp;lt;/title&amp;gt;
&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=#{charset}&quot; /&amp;gt;
&amp;lt;style type=&quot;text/css&quot;&amp;gt;
 * {font-family: monospace;}
 .nick {font-weight: bold; color: #A00;}
 .ref {font-style: italic; color: #090;}
 .timestamp {color: #AAA;}
 .me {color: #00B;}
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h1&amp;gt;#{titre}&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;
EOL

foot = &amp;lt;&amp;lt;EOL
&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
EOL

str.gsub!(/^ERC&amp;gt;.*$/n, &quot;&quot;)
str.gsub!(/
\s+/n, &quot; &quot;)
str.gsub!(/[\d\d:\d\d]/) { |s| &quot;
&quot;+s+&quot;
&quot;}
str.gsub!(/\s+$/n, &quot;&quot;)
str.gsub!(/^\*\*\* .*$/n, &quot;&quot;)
5.times {str.gsub!(/
\s*
/n, &quot;
&quot;)}

str = CGI::escapeHTML(str)
str.gsub!(/^&amp;amp;lt;.*?&amp;amp;gt;/n) {|s| '&amp;lt;span class=&quot;nick&quot;&amp;gt;'+s+'&amp;lt;/span&amp;gt;'}
str.gsub!(/(&amp;lt;\/span&amp;gt;) (\w+\s?:)/n) {|s| $1+' &amp;lt;span class=&quot;ref&quot;&amp;gt;'+$2+'&amp;lt;/span&amp;gt;'}
str.gsub!(/[\d\d:\d\d]/) { |s| '&amp;lt;span class=&quot;timestamp&quot;&amp;gt;'+s+'&amp;lt;/span&amp;gt;'}
str.gsub!(/^\* .*$/n) {|s| '&amp;lt;span class=&quot;me&quot;&amp;gt;'+s+'&amp;lt;/span&amp;gt;'}
str.gsub!(/
/, &quot;&amp;lt;br /&amp;gt;
&quot;)

str = head + str
str = str + foot

puts str&lt;/pre&gt;</description>
    
    
    
          <comments>http://blog.nozav.org/post/2006/01/07/39-erc2html#comment-form</comments>
      <wfw:comment>http://blog.nozav.org/post/2006/01/07/39-erc2html#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.nozav.org/feed/rss2/comments/37</wfw:commentRss>
      </item>
    
  <item>
    <title>Oneliner en Ruby</title>
    <link>http://blog.nozav.org/post/2005/11/14/37-oneliner-en-ruby</link>
    <guid isPermaLink="false">urn:md5:6e89003d7d2b1f814061595d1a82334f</guid>
    <pubDate>Mon, 14 Nov 2005 21:03:39 +0000</pubDate>
    <dc:creator>Juba</dc:creator>
        <category>Linux, Debian, etc.</category>
        <category>ruby</category><category>script</category>    
    <description>    &lt;p&gt;Après avoir essayé (de manière plus ou moins approfondie) plusieurs langages de script comme Perl ou Python, et après avoir longuement hésité, je crois que mon choix va finalement se porter sur &lt;a href=&quot;http://www.ruby-lang.org&quot; hreflang=&quot;en&quot;&gt;Ruby&lt;/a&gt;. Celui-ci me semble en effet combiner à la fois la puissance et la concision de Perl avec la clarté d'un langage purement objet.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Voici donc un exemple de &lt;em&gt;oneliner&lt;/em&gt; en Ruby, en l'occurrence qui permet de renommer en minuscules tous les fichiers d'un répertoire :&lt;br /&gt;&lt;/p&gt;


&lt;pre&gt; ruby -e 'ARGV.each {|file| File.rename(file, file.downcase)}' *&lt;/pre&gt;


&lt;p&gt;Plutôt simple, non&amp;nbsp;? En plus, il y a moyen de rendre cela beaucoup plus souple et puissant en utilisant des regexps, du type :&lt;br /&gt;&lt;/p&gt;


&lt;pre&gt; ruby -e 'ARGV.each {|file| File.rename(file, file.gsub(/toto/, &quot;titi&quot;)}' *&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Conversion en lot de fichiers WMA en fichiers OGG</title>
    <link>http://blog.nozav.org/post/2005/05/13/25-conversion-en-lot-de-fichiers-wma-en-fichiers-ogg</link>
    <guid isPermaLink="false">urn:md5:7b4d57b0daee1cb786c55f9857f0df1d</guid>
    <pubDate>Fri, 13 May 2005 10:21:24 +0000</pubDate>
    <dc:creator>Juba</dc:creator>
        <category>Linux, Debian, etc.</category>
        <category>audio</category><category>bash</category><category>linux</category><category>perl</category><category>script</category>    
    <description>    &lt;p&gt;Il m'arrive régulièrement de recevoir une série de fichiers audio au format WMA de Windows Media. Mplayer sait les lire, certes, mais quoi de mieux qu'un format audio libre et ouvert comme &lt;a href=&quot;http://www.vorbis.com/&quot; hreflang=&quot;en&quot;&gt;Ogg Vorbis&lt;/a&gt; pour assurer la pérennité de ses musiques préférées ?&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Heureusement, grâce à mplayer toujours et à une &lt;a href=&quot;http://linuxfr.org/tips/266.html&quot; hreflang=&quot;fr&quot;&gt;astuce vue sur linuxfr&lt;/a&gt;, voici un petit script shell qui vous permet de convertir en lot tous les fichiers wma d'un répertoire en ogg. Notez que vous pouvez facilement l'utiliser pour effectuer une conversion en mp3, en utilisant lame plutôt que oggenc (mais le format mp3 n'est pas libre) :&lt;br /&gt;&lt;/p&gt;


&lt;pre&gt;#!/bin/sh

for WMA in `ls *.wma`; do
    OGG=`basename $WMA .wma`.ogg;
    TMP=${TMPDIR:-/tmp}/wma2ogg.$$
    mplayer -ao pcm:file=$TMP $WMA;
    trap &quot;rm $TMP* 2&amp;gt;/dev/null&quot; 0
    nice -n 15 oggenc -m 128 $TMP -o $OGG
done&lt;/pre&gt;


&lt;p&gt;Seul petit hic, ce script peut ne pas fonctionner si les noms de vos fichiers contiennent des espaces. Vous pouvez donc utiliser la commande suivante pour transformer tous les espaces des noms de fichiers de votre répertoire en underscores :&lt;br /&gt;&lt;/p&gt;


&lt;pre&gt;find . -type f -name &quot;* *&quot; -print0 | \
perl -n0e '$old = $_; s/ /_/g; rename $old, $_'&lt;/pre&gt;



&lt;p&gt;De même, ce script utilise les options de la dernière version de mplayer. Si vous rencontrez des problèmes, vous pouvez essayer la syntaxe suivante :&lt;br /&gt;&lt;/p&gt;


&lt;pre&gt;mplayer -ao pcm -aofile $TMP $WMA;&lt;/pre&gt;</description>
    
    
    
          <comments>http://blog.nozav.org/post/2005/05/13/25-conversion-en-lot-de-fichiers-wma-en-fichiers-ogg#comment-form</comments>
      <wfw:comment>http://blog.nozav.org/post/2005/05/13/25-conversion-en-lot-de-fichiers-wma-en-fichiers-ogg#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.nozav.org/feed/rss2/comments/23</wfw:commentRss>
      </item>
    
  <item>
    <title>Changer récursivement les permissions de répertoires</title>
    <link>http://blog.nozav.org/post/2005/05/12/23-changer-recursivement-les-permissions-de-repertoires</link>
    <guid isPermaLink="false">urn:md5:b773a524d46a70134f3a8cbf6dc4a00c</guid>
    <pubDate>Thu, 12 May 2005 15:15:31 +0000</pubDate>
    <dc:creator>Juba</dc:creator>
        <category>Linux, Debian, etc.</category>
        <category>bash</category><category>linux</category><category>script</category><category>sysadmin</category>    
    <description>    &lt;p&gt;Il peut parfois être utile de changer d'un coup les permissions ou les propriétés d'un répertoire et de ses sous-répertoires, mais seulement des répertoires, pas des fichiers normaux.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Deux exemples pratiques&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;vous venez de transférer des fichiers depuis une parto windows, et ceux-ci ont tous la permission &quot;éxecutable&quot;. Seulement, si vous faites un chmod -R -x *, vos répertoires vont perdre leur attribut exécutable et vous ne pourrez plus rentrer dedans. C'est gênant&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;vous avez un répertoire (par exemple /var/www) que vous voulez partager entre plusieurs personnes d'un même groupe (par exemple le groupe web). L'idéal est de positionner le &quot;sticky bit&quot; de ce répertoire et de ses sous-répertoire pour le groupe, afin que tous les fichiers nouvellement créés appartiennent également à ce groupe. Là aussi, un chmod -R g+s * pose problème.&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Voilà donc la solution à ces deux problèmes. Il suffit de se positionner dans le répertoire racine choisi et de faire un&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;find . -type d | xargs chmod +x&lt;/pre&gt;

&lt;p&gt;ou, pour le deuxième problème&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;find . -type d | xargs chmod g+s&lt;br /&gt;&lt;/pre&gt;


&lt;p&gt;Et voilou&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.nozav.org/post/2005/05/12/23-changer-recursivement-les-permissions-de-repertoires#comment-form</comments>
      <wfw:comment>http://blog.nozav.org/post/2005/05/12/23-changer-recursivement-les-permissions-de-repertoires#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.nozav.org/feed/rss2/comments/21</wfw:commentRss>
      </item>
    
</channel>
</rss>