On 2008-01-29 19:37 +0100, Jack.R wrote: > On Tue, 29 Jan 2008 15:05:43 +0100 > Andre Majorel <[EMAIL PROTECTED]> wrote: > > > > Un petit script bash (non testé, donc travailler sur une copie des > > > images) > > > > > > #!/bin/sh > > > count=0 > > > for item in `ls -t -r *.png` > > > do > > > mv $item `printf "%06d" $count`.png > > > count=$(( $count + 1 )) > > > done > > > > Il y a au moins un problème avec ce script ; la liste des fichiers > > à traiter doit tenir sur la ligne de commande. > > Je viens de faires des essais avec une trentaine de fichier dont les > noms font environ 70 caractères, ls passe bien à la ligne mais cela > fonctionne.
Il faut essayer avec les 25000 qu'a le monsieur. :-) > Cela cloche lorsqu'il y a des espaces dans le nom des fichiers à > traiter. Oui, parce que le shell fait une passe de word splitting sur le résultat de l'expansion des backquotes. > Je suis curieux et je n'ai pas compris ce que tu voulais dire. Peux-tu > expliquer ? Sous Unix, il y a une limite à la longueur totale des arguments d'un process. Cette limite s'appelle ARG_MAX (limits.h) et sa valeur varie d'un système à l'autre. Sous Linux, elle était de 128 kB aux dernières nouvelles. SUS dit que ARG_MAX doit être supérieure ou égale à _POSIX_ARG_MAX, qui vaut 4 kB. Il n'est pas prudent de faire « for v in `truc` » ou « foo * » si on n'est pas sûr que l'expansion de « `truc` » ou « * » n'excèdera pas _POSIX_ARG_MAX. Il vaut mieux utiliser xargs ou, si on ne peut pas, « while read ». Dans le cas qui nous occupe, ls -t -r *.png | while IFS= read -r f do mv "$f" ... done Et attention : "The number of bytes available for the new process' combined argument and environment lists is {ARG_MAX}. It is implementation-dependent whether null terminators, pointers, and/or any alignment bytes are included in this total." Donc, dans le cas le plus défavorable, 4 kB pour ARG_MAX, disons 1 kB d'environnement, des noms de fichiers de deux caractères, quatre octets par pointeur et un alignement à 16, on pourrait parfaitement être limité à (4096 - 1024) / (16 + 4) = 153 arguments ce qui correspond à 306 caractères. -- André Majorel <http://www.teaser.fr/~amajorel/> The Debian project must be praised for their efforts in fighting spam by flooding spammers with email addresses, some of which are even bogus. -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.net/?DebianFrench Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et "Reply-To:" To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]