Re: Quizz en shell du vendredi ;-)

Page principale

Répondre à ce message
Auteur: jeanluc
Date:  
À: guilde
Sujet: Re: Quizz en shell du vendredi ;-)
Le mardi 16 septembre 2008 22:07, Nicolas Tripon a écrit :
>
>   find . -exec sh -c 'file "$0" | grep QuickTime >/dev/null' {} \; \
>          -exec sh -c 'mencoder -o "$0".avi -ovc lavc -oac pcm "$0"' {} \;

>
> Ceci devrait accepter tous les caractères admis pour les noms de fichiers
> (c.a.d tous les caractères à l'exception de '\0' et '/').
> Autre méthode (mais je n'ai essayé aucune) :
>
> find . -exec sh -c 'file "$0" | grep QuickTime >/dev/null' {} \; -print0 |
> xargs -0 -I '{}' mencoder -o '{}'.avi -ovc lavc -oac pcm '{}'
>
> -Nicolas


Je fais plutot souvent avec la boucle "for" ou avec IFS.  Peu importe, je voudrais rester
sur cette proposition, ca m'interresse ..... parce que ca marche bien.
Demo:
        prompt> ls
        prompt> echo text >"toto"
        prompt> echo text >"to to"
        prompt> echo text >'to^ {éà]to'
        prompt> find . -exec sh -c 'file "$0" | grep ASCII >/dev/null ' {} \; -exec sh -c 'ls -la "$0" ' {} \;
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:21 ./toto
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:22 ./to to
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:27 ./to^ {éà]to


Est-ce qu'on peut avoir une explication de texte ?
Pour simplifier, déjà celle-ci  c'est pas mal :
        prompt> find . -exec sh -c 'file "$0" | grep ASCII >/dev/null ' {} \; -print
        ./toto
        ./to to
        ./to^ {éà]to


Bon, "find ." .... renvoie tous les fichiers. OK, ca c'est facile.
Et puis quoi ? le "{}" .... c'est les fichiers du 'find .' .... non ?
mais alors le $0 ... il sort d'ou ? c'est quoi le truc ?
on a -exec sh -c 'file "$0" | grep ASCII >/dev/null ' {}

alors, j'ai rajouté un binaire pour etre bien sur :
        prompt> ls -l  *
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:39 monbinaire.exe
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:27 to^ {éà]to
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:21 toto
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:22 to to
        prompt> file monbinaire.exe
        monbinaire.exe: PDP-11 UNIX/RT ldp
        prompt> file toto
        toto: ASCII text
        prompt> sh -c 'file toto | grep ASCII >/dev/null'
        prompt> sh -c 'file monbinaire.exe | grep ASCII >/dev/null'
        [normal, rien de choquant]


        prompt> find . -exec sh -c 'file "$0" | grep ASCII >/dev/null' {} \; -exec sh -c 'ls -la "$0" ' {} \;
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:21 ./toto
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:22 ./to to
        -rw-r--r-- 1 jeanluc jeanluc 5 2008-09-16 22:27 ./to^ {éà]to
        [et bien oui, ca marche bien !!! c'est presque là que c'est choquant !]


Merci pour vos lumières !
J'essaierai celle avec le -print0 plutard ... ca m'interresse aussi. Chaque chose en son temps.

Jean-Luc.