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.