Re: [HS Debian] rm : liste d'arguments trop longue
Yves Rutschle a écrit : On Wed, Mar 28, 2007 at 05:38:07PM +0200, Michel Campfort wrote: Voici la fin de mes investigations . La ligne de commande serait-elle deux fois plus courte en 64 bits ? Use the source, Luke. Le code qui fait la comparaison est le suivant: bprm-p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *); [...] bprm-argc = count(argv, bprm-p / sizeof(void *)); if ((retval = bprm-argc) 0) goto out_mm; sizeof(void*), ça doit faire 8 sur archi 64 et ça fait 4 sur archi 32. Donc effectivement ta ligne de commande va etre moitiée plus courte. Y. Merci beaucoup pour tes explications . L'adage est respecté : il vaut mieux 1 qui sait que 10 qui cherchent . Amicalement Michel -- Tuxophiles, bien sûr que nous sommes tuxophiles, et winophobes en plus. Mais il ne faut pas confondre tuxophilie et tuxo-intégrisme, l'amalgame est fait beaucoup trop rapidement par les winophiles-tuxophobes . -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
On Thu, Mar 29, 2007 at 07:12:40PM +0200, Michel Campfort wrote: L'adage est respecté : il vaut mieux 1 qui sait que 10 qui cherchent . J'objecte, je ne savais rien de tout ça il y a une semaine, les raisons de mon savoir se résument à un peu de curiosité et bcp de plus pour la question originale, et bcp de curiosité pour ta seconde questions. Tout ça, je l'ai bien trouvé dans le source. L'adage est respecté: il vaut mieux 1 gars qui peut chercher dans le code disponible librement que 10 qui savent mais ne peuvent rien dire car ils ont signé un NDA. Y. -- heu, j'ai inventé mon adage. -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
Yves Rutschle a écrit : [ . . . ] Nombre d'arguments: [EMAIL PROTECTED]:~/try2$ ( for i in `seq 1 32766`; do echo -n a ; done ) toto [EMAIL PROTECTED]:~/try2$ touch `cat toto` [EMAIL PROTECTED]:~/try2$ ( for i in `seq 1 32767`; do echo -n a ; done ) toto [EMAIL PROTECTED]:~/try2$ touch `cat toto` bash: /usr/bin/touch: Argument list too long Voilà voilà. Y. -- Oh, bah, on s'est bien amusés. Bonjour Yves , J'ai voulu voir sur un amd64 , etch en 64 bits , à jour : [EMAIL PROTECTED]:~/XX$ ( for i in `seq 1 16383`; do echo -n a ; done ) toto [EMAIL PROTECTED]:~/XX$ touch `cat toto` bash: /usr/bin/touch: Liste d'arguments trop longue [EMAIL PROTECTED]:~/XX$ ( for i in `seq 1 16382`; do echo -n a ; done ) toto [EMAIL PROTECTED]:~/XX$ touch `cat toto` [EMAIL PROTECTED]:~/XX$ Voici la fin de mes investigations . La ligne de commande serait-elle deux fois plus courte en 64 bits ? Amicalement Michel -- Tuxophiles, bien sûr que nous sommes tuxophiles, et winophobes en plus. Mais il ne faut pas confondre tuxophilie et tuxo-intégrisme, l'amalgame est fait beaucoup trop rapidement par les winophiles-tuxophobes . -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
On Wed, Mar 28, 2007 at 05:38:07PM +0200, Michel Campfort wrote: Voici la fin de mes investigations . La ligne de commande serait-elle deux fois plus courte en 64 bits ? Use the source, Luke. Le code qui fait la comparaison est le suivant: bprm-p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *); [...] bprm-argc = count(argv, bprm-p / sizeof(void *)); if ((retval = bprm-argc) 0) goto out_mm; sizeof(void*), ça doit faire 8 sur archi 64 et ça fait 4 sur archi 32. Donc effectivement ta ligne de commande va etre moitiée plus courte. Y. -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
On 2007-03-23 18:28:10 +0100, Sylvain Sauvage wrote: Steve, vendredi 23 mars 2007, 18:13:48 CET 1- quelle est le nombre maximal ? comment le trouver ? C'est plus la taille (en caractères) que le nombre. Pour connaître cette limite, tu peux lire les sources de bash... Utilise zsh, il n'y a pas de limite. La seule que tu auras sera celle du noyau, mais pour éviter cette limite, tu peux toujours utiliser le rm de zsh (module zsh/files). -- Vincent Lefèvre [EMAIL PROTECTED] - Web: http://www.vinc17.org/ 100% accessible validated (X)HTML - Blog: http://www.vinc17.org/blog/ Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon) -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
On 2007-03-24 14:12:56 +0100, François TOURDE wrote: Le 13596ième jour après Epoch, François TOURDE écrivait: Tu aurais pû aussi faire: $ rm \* Tiens, après vérification, il semble que cela ne marche plus :( Je suis pourtant quasiment sûr que rm était capable de faire l'expansion lui-même... Ce qui empêchait d'effacer des fichiers comme '?', '*', et autres... Il n'en a pas le droit dans le comportement par défaut: ce ne serait pas compatible POSIX (ni compatible avec le comportement traditionnel de rm). En revanche, rien n'empêche un rm d'avoir une option (non standard) qui fait ce que tu veux. -- Vincent Lefèvre [EMAIL PROTECTED] - Web: http://www.vinc17.org/ 100% accessible validated (X)HTML - Blog: http://www.vinc17.org/blog/ Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon) -- 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]
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
Re: [HS Debian] rm : liste d'arguments trop longue
Le vendredi 23 mars 2007 23:24, François TOURDE a écrit : Le 13595ième jour après Epoch, Enfin ! Donc le nombre d'arguments est au plus de 5982. Ce qui me mène à me poser deux questions : 1- quelle est le nombre maximal ? comment le trouver ? Je ne sais pas le max, mais ça doit être marqué dans bash, non? :) je n'ai pas encore terminé la lecture des sources (et encore moins de la man) ;-) 2- comment m'en affranchir dans mon cas ? $ cd .. $ rm -fr ton_répertoire $ mkdir ton_répertoire j'y avais pensé, mais je ne voulais pas le faire comme cela avec en plus un changement d'owner et de droits pour le rép. en question. Ou alors $ set -f Je ne vois pas cette option dans « man set ». Que fait-elle ? $ rm * Les autres commandes qui t'ont été proposées, à base de find et autre xargs marchent aussi bien sûr, mais me semblent plus ... compliquées dans ton cas :) J'avais envie de compliqué hier soir ;-). Merci et bonne journée à tous -- steve
Re: [HS Debian] rm : liste d'arguments trop longue
Cyril Roques a écrit : le caractere * est remplacé par bash lui-meme donc quand tu fait ls 31* bash execute reellement ls 31123 312334 31345 .. c'est pour cela qu'il t'envoi dans les choux donc quelque chose comme ls | grep ^31 | xargs rm devrait fonctionner Est-ce que ça ne peut pas être considéré comme un défaut (corrigible ?) de rm ? Je dois dire que je ne sais pas comment fonctionnent ses relations avec le système de fichiers. -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
Yannick P. a écrit : Est-ce que ça ne peut pas être considéré comme un défaut (corrigible ?) de rm ? Ou plutôt de Bash. -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
Steve a écrit, samedi 24 mars 2007, à 08:15 : Bonjour, bonjour, [...] 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 ? Tu parles plutôt de la longueur d'un « nom de fichier » ? Ça dépend du système de fichiers utilisé (et de l'OS). C'est facile à tester, $ A=A;for((n=0;n16;n++));do echo 2^$n A;touch $A||break;A=$A$A;done 2^0 A 2^1 A 2^2 A 2^3 A 2^4 A 2^5 A 2^6 A 2^7 A 2^8 A touch: ne peut faire un touch sur `[...]': Nom de fichier trop long donc en ext3 (sarge), la limite est entre 128 et 256 --- peut-être 255, à cause du caractère NUL final ? La fin est laissée en exercice ;) Il me semble qu'il peut aussi y avoir une limite sur la longueur totale du chemin --- elle était assez basse dans le vieux standard iso9660 des CD (avec aussi une limite à la profondeur de l'arbre, de mémoire 8 ou 9 niveaux). Merci à tous pour vos réponses de rien, -- Jacques L'helgoualc'h -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
Yannick P. [EMAIL PROTECTED] writes: Yannick P. a écrit : Est-ce que ça ne peut pas être considéré comme un défaut (corrigible ?) de rm ? Ou plutôt de Bash. Non, enfin plutôt c'est tellement traditionnel sous Unix, depuis tellement longtemps qu'on ne peut plus le changer, trop d'outils dépendent de ce fonctionnement. d'ailleurs les autres shells font pareil. D'ailleurs un intérêt important de ce fonctionnement, c'est que si je veux que mon script/application puisse être lancer sous la forme toto * il me suffit de ne rien faire, bash/sh/tcsh/ksh/... le fait pour moi. -- Rémi Vanicat -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
Le 13596ième jour après Epoch, [EMAIL PROTECTED] écrivait: Le vendredi 23 mars 2007 23:24, François TOURDE a écrit : $ cd .. $ rm -fr ton_répertoire $ mkdir ton_répertoire j'y avais pensé, mais je ne voulais pas le faire comme cela Ah? C'est pourtant facile, non? $ set -f Je ne vois pas cette option dans « man set ». Que fait-elle ? Elle ne semble pas être dans le man de bash, c'est bizarre. En gros, elle empêche le développement des noms par le shell. $ set -f $ rm * la commande rm est appelée avec le paramètre *, et il se trouve qu'elle sait gérer ça. Tu aurais pû aussi faire: $ rm \*
Re: [HS Debian] rm : liste d'arguments trop longue
Le 13596ième jour après Epoch, François TOURDE écrivait: Le 13596ième jour après Epoch, [EMAIL PROTECTED] écrivait: Le vendredi 23 mars 2007 23:24, François TOURDE a écrit : $ cd .. $ rm -fr ton_répertoire $ mkdir ton_répertoire j'y avais pensé, mais je ne voulais pas le faire comme cela Ah? C'est pourtant facile, non? $ set -f Je ne vois pas cette option dans « man set ». Que fait-elle ? Elle ne semble pas être dans le man de bash, c'est bizarre. En gros, elle empêche le développement des noms par le shell. $ set -f $ rm * la commande rm est appelée avec le paramètre *, et il se trouve qu'elle sait gérer ça. Tu aurais pû aussi faire: $ rm \* Tiens, après vérification, il semble que cela ne marche plus :( Je suis pourtant quasiment sûr que rm était capable de faire l'expansion lui-même... Ce qui empêchait d'effacer des fichiers comme '?', '*', et autres... C'est promis, demain j'arrête ;) -- La difficulté pour les célibataires c'est de déshabiller les femmes, pour les maris c'est de les habiller.
Re: [HS Debian] rm : liste d'arguments trop longue
On Fri, Mar 23, 2007 at 11:24:32PM +0100, François TOURDE wrote: 1- quelle est le nombre maximal ? comment le trouver ? Je ne sais pas le max, mais ça doit être marqué dans bash, non? :) Attention, la curiosité est un défaut dangereux qui peut vous emmener à des endroits que vous n'imaginiez pas. Or donc, je me dis que j'allais trouver la limite dans le code de bash. Manque de bol, bash gère les paramètres comme des listes chainées. Lorsqu'il y a expansion (de variables, de 'globs' comme * en listes de fichiers, etc) il crée de nouveaux éléments dans la liste. Toute la liste est ensuite passée à execve sous forme d'un tableau de chaînes (argc, argv)[1]. À aucun moment bash ne travaille sur la chaîne d'entrée complète. Conclusion 1: Bash n'a aucune limite de taille de ligne de commande. Bon, faut regarder execve alors. Dans glibc, on se rend compte que la libc fait quelques vérifications sur les paramètres, mais globalement ne fait que passer le argc et argv au noyau[2]. Bon, faut regarder dans le noyau alors. Bingo: execve dans le noyau[3] additionne le nombre d'arguments et vérifie qu'il soit inférieur à (PAGE_SIZE*MAX_ARGPAGES-4)/4, soit 32767, puis il additionne la taille de tous les arguments et de l'environnement et vérifie qu'il soit inférieur à (PAGE_SIZE*MAX_ARGPAGES-4), soit 131068. Conclusion 2: La limitation est le fait de Linux, le comportement de Bash devrait donc être différent sur Cygwin ou BSD. Conclusion 3: Linux limite le nombre d'arguments à 32767 et la longueur totale des arguments plus de l'environnement à 131068 octets. Vérification expérimentale: [EMAIL PROTECTED]:~/try$ env | wc 24 241046 Taille maximum de ligne de commande: [EMAIL PROTECTED]:~/try$ for i in `seq 1 13002`; do touch `printf %09d $i`; done [EMAIL PROTECTED]:~/try$ ls | wc 13002 13002 130020 [EMAIL PROTECTED]:~/try$ rm * bash: /bin/rm: Argument list too long Environnement + Ligne = 1046 + 130020 = 131066 [EMAIL PROTECTED]:~/try$ for i in `seq 1 13000`; do touch `printf %09d $i`; done [EMAIL PROTECTED]:~/try$ ls | wc 13000 13000 13 [EMAIL PROTECTED]:~/try$ rm * [EMAIL PROTECTED]:~/try$ Environnement + Ligne = 1046 + 13 = 131046 (apparement je me suis trompé dans une limite, c'est un peu moins que 131068) Nombre d'arguments: [EMAIL PROTECTED]:~/try2$ ( for i in `seq 1 32766`; do echo -n a ; done ) toto [EMAIL PROTECTED]:~/try2$ touch `cat toto` [EMAIL PROTECTED]:~/try2$ ( for i in `seq 1 32767`; do echo -n a ; done ) toto [EMAIL PROTECTED]:~/try2$ touch `cat toto` bash: /usr/bin/touch: Argument list too long Voilà voilà. Y. -- Oh, bah, on s'est bien amusés. [1] bash:execute_cmd.c:shell_execve() [2] glibc:sysdeps/unix/sysv/linux/execve.c [3] linux-2.6.14:fs/exec.c:do_execve() et copy_strings() -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
Steve, samedi 24 mars 2007, 08:15:57 CET Bonjour, ’jour, [...] 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. Le problème n’est pas avec ce qui est « retourné » mais avec ce qui est donné. Comme l’a expliqué Yves dans le compte rendu de sa recherche de la limite perdue, la limite concerne la taille de la ligne de commande une fois qu’elle est « globée » (les jokers remplacés). Dans 'ls | xargs rm', la ligne de commande est « ls », alors que dans 'ls 31*', c’est « ls 31bla1 31bla2 ... », qui déborde. Ce que tu appelle « retourné » est ce qui est « affiché », plus précisément ce que ls envoie dans son flux de sortie standard. La taille du flux n’est pas limitée (/dev/zero est un flux infini). Et c’est parce que la taille du flux n’est pas limitée que je t’ai proposé d’utiliser un tube et xargs. [...] Question subsidiaire 2 : quelle est la longueur maximale d'un fichier ? Je suppose que tu veux connaître la longueur maximale d’un _nom de fichier. Tu peux trouver tout ça par là : http://en.wikipedia.org/wiki/Comparison_of_file_systems (d’ailleurs, si quelqu’un se sent motivé de traduire la page pour compléter la version française...) Ça va de 8 octets à 4032 octets (reiserfs, mais ça correspond à 255 caractères). Pour la taille maximale d’un fichier, ça va de quelques kio à l’infini (GPFS, pour les clusters). N'y a t-il pas une variable d'environnement s'y rapportant et qu'on peut modifier ? Eh non. -- Sylvain Sauvage
Re: [HS Debian] rm : liste d'arguments trop longue
Le 13596ième jour après Epoch, Yves Rutschle écrivait: On Fri, Mar 23, 2007 at 11:24:32PM +0100, François TOURDE wrote: 1- quelle est le nombre maximal ? comment le trouver ? Je ne sais pas le max, mais ça doit être marqué dans bash, non? :) Attention, la curiosité est un défaut dangereux qui peut vous emmener à des endroits que vous n'imaginiez pas. Or donc, je me dis que j'allais trouver la limite dans le code de bash. [... Tout un tas de trucs et de machins ...] Voilà voilà. Excellente investigation ! Bravo pour ce compte-rendu tout à fait complet. Il pleut, chez toi aussi, non? :) Y. -- Oh, bah, on s'est bien amusés. Voilà, c'est bien ce que je pensais... Il pleut. -- C'est par peur de la mort que je pense au suicide. -+- Michel Blanc -+-
Re: [HS Debian] rm : liste d'arguments trop longue
On Sat, Mar 24, 2007 at 05:25:10PM +0100, Sylvain Sauvage wrote: Dans 'ls | xargs rm', la ligne de commande est « ls », alors que dans 'ls 31*', c???est « ls 31bla1 31bla2 ... », qui déborde. Au fait, au cours de ma recherche de ce matin, j'ai appris un autre truc: xargs limite la taille de la ligne de commande à 20k (ce qui correspond à ne prendre aucun risque, comme vu ce matin), et cette limite est parametrable avec -s. Une fois la limite atteinte, il lance une nouvelle commande. Y. -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
Voilà voilà. Y. -- Oh, bah, on s'est bien amusés. je vois ;-) -- steve
[HS Debian] rm : liste d'arguments trop longue
Bonsoir, J'ai un répertoire contenant 10G de données réparties en petit fichier (genre 50 ko, donc ça fait *beaucoup* de fichiers). Je désire effacer tous les fichiers. Mais : $ rm * bash: /bin/rm: Liste d'arguments trop longue $ rm 3* bash: /bin/rm: Liste d'arguments trop longue $ rm 31* bash: /bin/rm: Liste d'arguments trop longue etc... . . Finalement $ rm 32-20070322231 «tab» Display all 5982 possibilities? (y or n)n (me dis que c'est bon .., mais) $ rm 32-20070322231* bash: /bin/rm: Liste d'arguments trop longue $ rm 32-20070322231 «tab» Display all 600 possibilities? (y or n)n $ rm 32-200703222311* $ Enfin ! Donc le nombre d'arguments est au plus de 5982. Ce qui me mène à me poser deux questions : 1- quelle est le nombre maximal ? comment le trouver ? 2- comment m'en affranchir dans mon cas ? Merci pour vos réponses et bonne fin de semaine. -- steve
Re: [HS Debian] rm : liste d'arguments trop longue
Steve, vendredi 23 mars 2007, 18:13:48 CET Bonsoir, 'soir, J'ai un répertoire contenant 10G de données réparties en petit fichier (genre 50 ko, donc ça fait *beaucoup* de fichiers). Je désire effacer tous les fichiers. Mais : $ rm * bash: /bin/rm: Liste d'arguments trop longue [...] Enfin ! Donc le nombre d'arguments est au plus de 5982. Ce qui me mène à me poser deux questions : 1- quelle est le nombre maximal ? comment le trouver ? C'est plus la taille (en caractères) que le nombre. Pour connaître cette limite, tu peux lire les sources de bash... 2- comment m'en affranchir dans mon cas ? Les tubes n'ont pas ce genre de limite : ls | xargs rm ou find . -type t -print0 | xargs -0 rm si des espaces se cachent dans les noms de fichiers. Merci pour vos réponses et bonne fin de semaine. Itou. -- Sylvain Sauvage
Re: [HS Debian] rm : liste d'arguments trop longue
Sylvain Sauvage, vendredi 23 mars 2007, 18:28:10 CET [...] find . -type t -print0 | xargs -0 rm Il faut lire « -type f » évidemment... -- Sylvain Sauvage
Re: [HS Debian] rm : liste d'arguments trop longue
Le vendredi 23 mars 2007 18:28, Sylvain Sauvage a écrit : Steve, vendredi 23 mars 2007, 18:13:48 CET Bonsoir, 'soir, J'ai un répertoire contenant 10G de données réparties en petit fichier (genre 50 ko, donc ça fait *beaucoup* de fichiers). Je désire effacer tous les fichiers. Mais : $ rm * bash: /bin/rm: Liste d'arguments trop longue [...] Enfin ! Donc le nombre d'arguments est au plus de 5982. Ce qui me mène à me poser deux questions : 1- quelle est le nombre maximal ? comment le trouver ? C'est plus la taille (en caractères) que le nombre. 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) 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...) 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) ? 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 ou find . -type f -print0 | xargs -0 rm si des espaces se cachent dans les noms de fichiers. ça rm, on dirait ... Merci pour vos réponses et bonne fin de semaine. Itou. Merci -- steve
Re: [HS Debian] rm : liste d'arguments trop longue
Steve a écrit : Bonsoir, J'ai un répertoire contenant 10G de données réparties en petit fichier (genre 50 ko, donc ça fait *beaucoup* de fichiers). Je désire effacer tous les fichiers. Mais : $ rm * bash: /bin/rm: Liste d'arguments trop longue $ rm 3* bash: /bin/rm: Liste d'arguments trop longue $ rm 31* bash: /bin/rm: Liste d'arguments trop longue etc... . . Finalement $ rm 32-20070322231 «tab» Display all 5982 possibilities? (y or n)n (me dis que c'est bon .., mais) $ rm 32-20070322231* bash: /bin/rm: Liste d'arguments trop longue $ rm 32-20070322231 «tab» Display all 600 possibilities? (y or n)n $ rm 32-200703222311* $ Enfin ! Donc le nombre d'arguments est au plus de 5982. Ce qui me mÚne à me poser deux questions : 1- quelle est le nombre maximal ? comment le trouver ? 2- comment m'en affranchir dans mon cas ? Merci pour vos réponses et bonne fin de semaine. Bonsoir, essayes find /rep -type f -exec rm {} \; a + -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
Steve a écrit : Le vendredi 23 mars 2007 18:28, Sylvain Sauvage a écrit : Steve, vendredi 23 mars 2007, 18:13:48 CET Bonsoir, 'soir, J'ai un répertoire contenant 10G de données réparties en petit fichier (genre 50 ko, donc ça fait *beaucoup* de fichiers). Je désire effacer tous les fichiers. Mais : $ rm * bash: /bin/rm: Liste d'arguments trop longue [...] Enfin ! Donc le nombre d'arguments est au plus de 5982. Ce qui me mène à me poser deux questions : 1- quelle est le nombre maximal ? comment le trouver ? C'est plus la taille (en caractères) que le nombre. 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) 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...) 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) ? 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 le caractere * est remplacé par bash lui-meme donc quand tu fait ls 31* bash execute reellement ls 31123 312334 31345 .. c'est pour cela qu'il t'envoi dans les choux donc quelque chose comme ls | grep ^31 | xargs rm devrait fonctionner ou find . -type f -print0 | xargs -0 rm si des espaces se cachent dans les noms de fichiers. ça rm, on dirait ... Merci pour vos réponses et bonne fin de semaine. Itou. Merci :) -- 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]
Re: [HS Debian] rm : liste d'arguments trop longue
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
Re: [HS Debian] rm : liste d'arguments trop longue
Le 13595ième jour après Epoch, [EMAIL PROTECTED] écrivait: Bonsoir, J'ai un répertoire contenant 10G de données réparties en petit fichier (genre 50 ko, donc ça fait *beaucoup* de fichiers). Je désire effacer tous les fichiers. Mais : $ rm * bash: /bin/rm: Liste d'arguments trop longue $ rm 3* bash: /bin/rm: Liste d'arguments trop longue $ rm 31* bash: /bin/rm: Liste d'arguments trop longue etc... . . Enfin ! Donc le nombre d'arguments est au plus de 5982. Ce qui me mène à me poser deux questions : 1- quelle est le nombre maximal ? comment le trouver ? Je ne sais pas le max, mais ça doit être marqué dans bash, non? :) 2- comment m'en affranchir dans mon cas ? $ cd .. $ rm -fr ton_répertoire $ mkdir ton_répertoire avec en plus un changement d'owner et de droits pour le rép. en question. Ou alors $ set -f $ rm * Les autres commandes qui t'ont été proposées, à base de find et autre xargs marchent aussi bien sûr, mais me semblent plus ... compliquées dans ton cas :)