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