Steve, vendredi 23 mars 2007, 18:45:42 CET
>[...] 
> donc, si je comprends bien, si j'ai par exemple 3 fichier de 5
> caractères de long chacun, le * aurait 15 caractères (sans
> compter les espaces)

  Si, les espaces sont comptés, soit en tant que tels, soit comme
des caractères de terminaison (\0).

> et c'est cette longueur qui est limitée à
> quelque chose de plus petit que mon 5982 (vu que là c'est le
> nombre de fichiers, qui font eux au moins un caratère de
> long). (j'espère que c'est clair pour tout le monde...) 

  Tu as 5982 noms de fichiers qui représentent  au  moins environ
12 000 caractères (un caractère par nom, plus le \0).  On ne peut
rien déduire de la taille limite de la ligne de commande à partir
de ça, car on a :
  |ta ligne| > limite
et
  |ta ligne| > 12 000

  En revanche,  on peut  dire que  ta ligne  a,  au plus, environ
120 000 caractères (une vingtaine de caractères par nom, avec 0).
Et donc la limite se situe en dessous de 120 000 caractères :
  |ta ligne| < 120 000
et
  |ta ligne| > limite
donc
  limite < 120 000
(si l’estimation d’une vingtaine de caractères par nom au max est
correcte).

> >   Pour connaître cette limite, tu peux lire les sources de
> > bash...
> 
>       Quelle bonne idée, je n'avais rien à faire ce soir ;-)
> Même pas une petite idée (en passant) ?

  Juste parce que j'aime les chiffres ronds : 64 ko ?

> > > 2- comment m'en affranchir dans mon cas ?
> >
> >   Les tubes n'ont pas ce genre de limite :
> >     ls | xargs rm
> 
> $ ls 31* | xargs rm
> bash: /bin/ls: Liste d'arguments trop longue
> rm: opérande manquante

  Normal, la commande  « ls 31* »  met aussi les noms de fichiers
dans la ligne de commande. Mon exemple était « ls »,  et, lui, il
ne comporte que « ls » dans la ligne de commande.

> > ou
> >     find . -type f -print0 | xargs -0 rm
> > si des espaces se cachent dans les noms de fichiers.
> 
> ça rm, on dirait ...

  C'est fait pour ;o)

-- 
 Sylvain Sauvage

Répondre à