Re: [HS Debian] rm : liste d'arguments trop longue

2007-03-29 Par sujet Michel Campfort

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

2007-03-29 Par sujet Yves Rutschle
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

2007-03-28 Par sujet Michel Campfort

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

2007-03-28 Par sujet Yves Rutschle
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

2007-03-27 Par sujet Vincent Lefevre
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

2007-03-27 Par sujet Vincent Lefevre
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

2007-03-24 Par sujet Steve
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

2007-03-24 Par sujet Steve
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

2007-03-24 Par sujet Yannick P.

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

2007-03-24 Par sujet Yannick P.

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

2007-03-24 Par sujet Jacques L'helgoualc'h
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

2007-03-24 Par sujet Remi Vanicat
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

2007-03-24 Par sujet François TOURDE
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

2007-03-24 Par sujet François TOURDE
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

2007-03-24 Par sujet Yves Rutschle
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

2007-03-24 Par sujet Sylvain Sauvage
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

2007-03-24 Par sujet François TOURDE
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

2007-03-24 Par sujet Yves Rutschle
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

2007-03-24 Par sujet Steve
 
 Voilà voilà.

 Y. --  Oh, bah, on s'est bien amusés.

je vois ;-)
-- 
steve



[HS Debian] rm : liste d'arguments trop longue

2007-03-23 Par sujet Steve
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

2007-03-23 Par sujet Sylvain Sauvage
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

2007-03-23 Par sujet Sylvain Sauvage
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

2007-03-23 Par sujet Steve
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

2007-03-23 Par sujet Bayrouni

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

2007-03-23 Par sujet Cyril Roques
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

2007-03-23 Par sujet Sylvain Sauvage
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

2007-03-23 Par sujet François TOURDE
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 :)