[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: