Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

26 réponses
Avatar
Steve
Bonsoir,

J'ai un r=C3=A9pertoire contenant 10G de donn=C3=A9es r=C3=A9parties en pet=
it fichier (genre=20
50 ko, donc =C3=A7a fait *beaucoup* de fichiers). Je d=C3=A9sire effacer to=
us les=20
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...
=2E
=2E
=46inalement
$ rm 32-20070322231 =C2=ABtab=C2=BB
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 =C2=ABtab=C2=BB
Display all 600 possibilities? (y or n)n
$ rm 32-200703222311*
$=20
Enfin ! Donc le nombre d'arguments est au plus de 5982. Ce qui me m=C3=A8ne=
=C3=A0 me=20
poser deux questions :

1- quelle est le nombre maximal ? comment le trouver ?
2- comment m'en affranchir dans mon cas ?

Merci pour vos r=C3=A9ponses et bonne fin de semaine.
=2D-=20
steve

10 réponses

1 2 3
Avatar
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 p etit
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
Avatar
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
Avatar
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
Avatar
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
with a subject of "unsubscribe". Trouble? Contact
Avatar
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
with a subject of "unsubscribe". Trouble? Contact
Avatar
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 ().

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 ). 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, lu i, 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
Avatar
fra-duf-no-spam
Le 13595ième jour après Epoch,
écrivait:

Bonsoir,

J'ai un répertoire contenant 10G de données réparties en p etit 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, n on? :)

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 :)
Avatar
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
Avatar
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 ().



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 ). On ne pe ut
rien déduire de la taille limite de la ligne de commande à part ir



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 n om 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 fichie rs
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 m arche.

> > 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
Avatar
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
with a subject of "unsubscribe". Trouble? Contact
1 2 3