OVH Cloud OVH Cloud

Trop de fichiers a la fois !

31 réponses
Avatar
Remi Moyen
Salut,

En faisant le ménage sur une machine, je tombe sur un répértoire de logs
qui contient beaucoup de fichiers, tous inutiles. Après vérification, je
fais donc un brutal rm. Et là...

$ rm *
bash: /bin/rm: Argument list too long

Argh, damned. Je savais qu'il y avait *beaucoup* de fichiers, mais à ce
point !!

(je ne compterais pas le détail, parce que la machine est lente et
vieille, et il met déjà assez de temps à tourner comme ça sans que j'en
rajoute...)

Je suis donc en train d'effacer les fichiers par paquets (rm log.249.*,
puis rm log.250.*, etc.), ce qui marche, mais bon, faut que j'ai déjà une
idée du nom des fichiers.

Est-ce que quelqu'un aurait une idée de comment faire pour tout effacer
d'un coup ?

Et au passage et par curiosité (et pour me donner une idée du nombre de
fichiers que j'ai !), c'est combien cette limite ?
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."

10 réponses

1 2 3 4
Avatar
JustMe
Remi Moyen wrote:

Salut,

En faisant le ménage sur une machine, je tombe sur un répértoire de logs
qui contient beaucoup de fichiers, tous inutiles. Après vérification, je
fais donc un brutal rm. Et là...

$ rm *
bash: /bin/rm: Argument list too long

Argh, damned. Je savais qu'il y avait *beaucoup* de fichiers, mais à ce
point !!

(je ne compterais pas le détail, parce que la machine est lente et
vieille, et il met déjà assez de temps à tourner comme ça sans que j'en
rajoute...)

Je suis donc en train d'effacer les fichiers par paquets (rm log.249.*,
puis rm log.250.*, etc.), ce qui marche, mais bon, faut que j'ai déjà une
idée du nom des fichiers.

Est-ce que quelqu'un aurait une idée de comment faire pour tout effacer
d'un coup ?


soit un rm -r du repertoire (et tu recrée le rep apres)
soit, dans le rep :

find . -type f -print0 | xargs -0 rm -f --

(si find/xargs pas "gnu" remplacer le print0 par print et enlever le 0
en priant pour qu'il n'y ai pas de noms de fichiers alakon)



Et au passage et par curiosité (et pour me donner une idée du nombre de
fichiers que j'ai !), c'est combien cette limite ?


Avatar
Fabrice..Bacchella
On Fri, 23 Apr 2004 15:23:35 +0200, JustMe wrote:

(si find/xargs pas "gnu" remplacer le print0 par print et enlever le 0
en priant pour qu'il n'y ai pas de noms de fichiers alakon)


ls | sed 's/.*/"&"/' | xargs rm $KAKOU

AVEC
KAKOU="-f -r" pour les courageux.


---
http://fba.homeip.net

Avatar
Laurent Wacrenier
Fabrice . Bacchella écrit:
(si find/xargs pas "gnu" remplacer le print0 par print et enlever le 0
en priant pour qu'il n'y ai pas de noms de fichiers alakon)


ls | sed 's/.*/"&"/' | xargs rm $KAKOU

AVEC
KAKOU="-f -r" pour les courageux.


Il pourrait y avoir un " dans le nom d'un fichier.


Avatar
Erwan David
Remi Moyen écrivait :

Est-ce que quelqu'un aurait une idée de comment faire pour tout effacer
d'un coup ?


find . -name log.* -print|xargs rm

Et au passage et par curiosité (et pour me donner une idée du nombre de
fichiers que j'ai !), c'est combien cette limite ?


Pour avoir le nombre de fichiers : ls|wc -l


--
Real programs don't eat cache

Avatar
Laurent Wacrenier
Erwan David écrit:
Pour avoir le nombre de fichiers : ls|wc -l


Inutile de les trier : ls -f | wc -l

Avatar
Remi Moyen
On Fri, 23 Apr 2004, Erwan David wrote:

Est-ce que quelqu'un aurait une idée de comment faire pour tout effacer
d'un coup ?


find . -name log.* -print|xargs rm


J'avais pas pensé au passage par xargs.

Mais je ne comprends pas pourquoi ça marche : si le problème est une liste
d'arguments trop longue, en quoi le fait de traiter cette liste par xargs
va la raccourcir ? À moins que xargs ne fasse un appel à rm par fichier
sorti par rm, mais je ne crois pas que ce soit le comportement de xargs
(je suis même sûr du contraire !).

Et au passage et par curiosité (et pour me donner une idée du nombre de
fichiers que j'ai !), c'est combien cette limite ?


Pour avoir le nombre de fichiers : ls|wc -l


Ben oui, mais non : vu la lenteur de ma machine (d'autant plus que le
disque est saturé, justement à cause de tout ces fichiers) et vu le nombre
de fichiers, le ls dure. Longtemps. Et même un peu plus que ça.

Comme j'ai pas envie d'attendre 10 min que le ls finisse (et le wc ensuite
-- quoique, n'affichant pas les noms, ça devrait aller plus vite), je
voudrais savoir en gros quelle est cette limite.

Surtout que je suis (enfin, j'étais, j'ai déjà nettoyé pas mal de choses)
largement au dessus de cette limite, puisque certaines sous catégories
(genre log.252*) me renvoyaient le même message d'erreur.
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."


Avatar
Erwan David
Remi Moyen écrivait :

On Fri, 23 Apr 2004, Erwan David wrote:

Est-ce que quelqu'un aurait une idée de comment faire pour tout effacer
d'un coup ?


find . -name log.* -print|xargs rm


J'avais pas pensé au passage par xargs.

Mais je ne comprends pas pourquoi ça marche : si le problème est une liste
d'arguments trop longue, en quoi le fait de traiter cette liste par xargs
va la raccourcir ? À moins que xargs ne fasse un appel à rm par fichier
sorti par rm, mais je ne crois pas que ce soit le comportement de xargs
(je suis même sûr du contraire !).


xargs ne fait pas un rm par fiuchier, mais un rm par paquet de
fichiers, avec des paquets assez petits pour que ça passe.

--
Real programs don't eat cache



Avatar
DINH Viêt Hoà

(si find/xargs pas "gnu" remplacer le print0 par print et enlever le 0
en priant pour qu'il n'y ai pas de noms de fichiers alakon)


à noter que -print0 dans find existe maintenant sur FreeBSD ainsi
que sur Darwin.

--
DINH V. Hoa,

"Quel dieu cet homme !" -- FiLH

Avatar
Paul GABORIT
À (at) Fri, 23 Apr 2004 16:49:48 +0200,
Remi Moyen écrivait (wrote):
Mais je ne comprends pas pourquoi ça marche : si le problème est une liste
d'arguments trop longue, en quoi le fait de traiter cette liste par xargs
va la raccourcir ? À moins que xargs ne fasse un appel à rm par fichier
sorti par rm, mais je ne crois pas que ce soit le comportement de xargs
(je suis même sûr du contraire !).


La fonction primaire de 'xargs' est justement de répondre à ce problème:
'xargs' construit une série de commandes dont la taille est juste à la limite
sans jamais l'atteindre.

Si xargs appelait 'rm' pour chacun des fichiers, il ne servirait à rien. Dans
ce cas, il suffirait d'utiliser l'option '-exec' de 'find'.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>

Avatar
Thomas Nemeth
Le ven 23 avr 2004 à 15:15, Remi Moyen a tapoté :
| Salut,
|
| En faisant le ménage sur une machine, je tombe sur un répértoire de logs
| qui contient beaucoup de fichiers, tous inutiles. Après vérification, je
| fais donc un brutal rm. Et là...
|
| $ rm *
| bash: /bin/rm: Argument list too long

Perso, si j'en ai la possibilté, je fais :
cd ..
rm -rf répertoire
mkdir répertoire


Thomas
--
Apres les neo-liberaux, les neo-marxistes, je ne doute meme pas de
l'existence des neo-capitalistes, neo-euros et neo-homos. On a meme droit
aux neo Linuxiens sous Windows (n'est pas neo-con qui veut).
-+- ST in GFA : Cherche jeu pour neo geo -+-
1 2 3 4