Re: [HS Debian] rm : liste d'arguments trop longue
Bonjour,
Le vendredi 23 mars 2007 19:54, Sylvain Sauvage a écrit :
> 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).
Je ne disais pas que les espaces n'étaient pas comptés, mais que je ne le
comptais dans mon exemple.
> > 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
ok
> de ça, car on a :
> |ta ligne| > limite
ok
> et
>
> |ta ligne| > 12 000
ok
> 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).
un peu plus dans mon cas : les fichiers s'écrivent avec 25 caractères :
01-20070324073955-03.jpg
(provient de motion)
> Et donc la limite se situe en dessous de 120 000 caractères :
> |ta ligne| < 120 000
on est d'accord
> et
>
> |ta ligne| > limite
c'est ce que j'ai observé
> donc
> limite < 120 000
> (si l’estimation d’une vingtaine de caractères par nom au max est
> correcte).
me paraît raisonnable
> > > 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 ?
ça se tient avec le raisonnement au-dessus
> > > > 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.
Là je ne comprends pas très bien : « ls 31* » retourne moins de fichiers que
juste « ls » non ? Mais après test, effectivement ça marche.
> > > 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)
Question subsidiaire : j'aimerai connaître la longueur en caractères de mes
6000 fichiers, comme si je les mettais bout à bout. Réponse trouvée en
écrivant la question, avec «ls | wc -m ».
Question subsidiaire 2 : quelle est la longueur maximale d'un fichier ? N'y a
t-il pas une variable d'environnement s'y rapportant et qu'on peut modifier ?
Merci à tous pour vos réponses
--
steve
Reply to: