Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 06/06/2006, 11h48   #1
Membre à l'essai
 
Inscription : janvier 2004
Messages : 124
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 124
Points : 21
Points : 21
Par défaut Effacer un très gros repertoire

Bonjour.

voilà mon probleme. j'ai un repertoire de 100 gigas avec des mails dedans. autrement dit, énormément de fichiers.

je veux le supprimer mais un me donne l'erreur du too many arguments.

j'ai donc fait un
Code :
ls -1 mails/ >> liste.txt
j'ai donc la liste de ces mails dans un fichier texte.

mais now, comment les virer un par un ?
une boucle for devrait suffire, mais je n'y arrive pas. c'est tout con, mais ça me prend la tete. donc si vous avez une idée.

merci bcp
Krispy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 11h51   #2
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 8 227
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 8 227
Points : 11 350
Points : 11 350
__________________
Pensez toujours aux cours, FAQ Perl et la fonction recherchez!!!!!!!!
Lisez les règles du forum Perl.

Aucun problème par MP, merci de poster vos questions dans les sous forums dédiés et rendez vos codes sources lisibles
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 11h52   #3
Membre à l'essai
 
Inscription : janvier 2004
Messages : 124
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 124
Points : 21
Points : 21
oué, j'aurais du préciser. merci de ta réponse.

malhereusement, cette commande échoue
elle rame et mouline pendant des heures sans resultat
Krispy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 11h56   #4
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 8 227
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 8 227
Points : 11 350
Points : 11 350
tu veux un script perl qui t'efface tes fichiers puis repertoires?
__________________
Pensez toujours aux cours, FAQ Perl et la fonction recherchez!!!!!!!!
Lisez les règles du forum Perl.

Aucun problème par MP, merci de poster vos questions dans les sous forums dédiés et rendez vos codes sources lisibles
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 11h58   #5
Membre à l'essai
 
Inscription : janvier 2004
Messages : 124
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 124
Points : 21
Points : 21
euh. bah juste les millions de fichiers contenus dans ce repertoire. mais faire tt un script pr ça, c'est ptet lourd.
Krispy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 12h00   #6
Membre Expert
 
Avatar de gnto
 
Homme
Consultant informatique
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 1 182
Points : 1 182
Citation:
Envoyé par Krispy
oué, j'aurais du préciser. merci de ta réponse.

malhereusement, cette commande échoue
elle rame et mouline pendant des heures sans resultat
si c'est des 100 de giga c'est normal !

Sinon action immédiat

ca mettra le meme tps mais qd tu arretera la commande y'auras des fichier de dissaparu donc au lancement de la seconde commande temps < au premier lancement
gnto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 12h03   #7
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 8 227
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 8 227
Points : 11 350
Points : 11 350
voilà un script.
mets ce script dans un fichier toto.pl
puis chmod +x toto.pl
puis perl toto.pl

voilà

test le sur un petit repertoire pour voir, j'ai pas eu le temps de le retester.
T'as juste à mettre le chemin de ton repertoire dans $repertoire.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/perl -w
use strict;
use Carp;

my $repertoire = "Le chemin de ton repertoire racine sans le slash de la fin";
&supp_rep($repertoire):

sub supp_rep{
	my $repertoire = shift;
	my @rep=();
	opendir (REP, $repertoire) || die "impossible d'ouvrir le repertoire $repertoire";
 	my @file_rep = grep { !/^\.\.?$/ } readdir(REP);
	closedir (REP);
	foreach my $nom (@file_rep) {
		if ( -f "$repertoire/$nom") {
			unlink ("$repertoire/$nom"); 
                        print "$repertoire/$nom supprimé\n"; 
	    	}elsif (-d "$repertoire/$nom") {
	      		push (@rep, "$repertoire/$nom");
	      		&supprimer_repertoire("$repertoire/$nom");
	    	}
	}
	#supprime les repertoires qui sont vide (du premier vide au dernier vide d'où le reverse)
	foreach my $rep_vide (reverse @rep) {
		rmdir ($rep_vide) if (-e $rep_vide);
	}
	rmdir($repertoire);
}
__________________
Pensez toujours aux cours, FAQ Perl et la fonction recherchez!!!!!!!!
Lisez les règles du forum Perl.

Aucun problème par MP, merci de poster vos questions dans les sous forums dédiés et rendez vos codes sources lisibles
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 12h09   #8
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 8 227
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 8 227
Points : 11 350
Points : 11 350
y avait des conneries dans le scripts, mets celui ci, je l'ai testé et optimisé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl -w
use strict;
use Carp;

my $repertoire = "Le chemin de ton repertoire racine sans le slash de la fin";
&supp_rep($repertoire);

sub supp_rep{
	my $repertoire = shift;
	my @rep=();
	opendir (REP, $repertoire) || die "impossible d'ouvrir le repertoire $repertoire";
	foreach my $nom (grep { !/^\.\.?$/ } readdir(REP)) {
		if ( -f "$repertoire/$nom") {
			unlink ("$repertoire/$nom"); 
                        print "$repertoire/$nom supprimé\n"; 
	    	}elsif (-d "$repertoire/$nom") {
	      		push (@rep, "$repertoire/$nom");
	      		&supp_rep("$repertoire/$nom");
	    	}
	}
	#supprime les repertoires qui sont vide (du premier vide au dernier vide d'où le reverse)
	foreach my $rep_vide (reverse @rep) {
		rmdir ($rep_vide) if (-e $rep_vide);
	}
	rmdir($repertoire);
}
system("rm -rf $repertoire");
	closedir (REP);
__________________
Pensez toujours aux cours, FAQ Perl et la fonction recherchez!!!!!!!!
Lisez les règles du forum Perl.

Aucun problème par MP, merci de poster vos questions dans les sous forums dédiés et rendez vos codes sources lisibles
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 12h14   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 892
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 892
Points : 4 437
Points : 4 437
Citation:
Envoyé par gnto
si c'est des 100 de giga c'est normal !

Sinon action immédiat


rm -f /mails/* ne fonctionnera pas s'il y a trop de fichiers.

tu peux faire quelque chose comme

Code :
1
2
3
4
 
# rm /mails/* 
ksh: /usr/bin/rm: 0403-027 The parameter list is too long.
# echo /mails/* | xargs -n 100 rm
ça te les efface par group de 100.

testé seulement sur AIX, man xargs peut t'aider
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 12h26   #10
Expert Confirmé
 
Avatar de Katyucha
 
Inscription : mars 2004
Messages : 3 053
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mars 2004
Messages : 3 053
Points : 2 933
Points : 2 933
J'avais eu ce problème sous Solaris aussi. Un répertoire rempli de 85 000 fichiers....
J'avais fait un truc simplissime :
rm -rf /mails/a*
rm -rf /mails/b*
rm -rf /mails/c*
etc...

Mais je pense que l'idée de Laurent est plus .... propre :p
__________________
Ancien Rédacteur Linux && Unix / Nouveau retraité de DVP
The UNIX way of sex:
gunzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

Je ne réponds ni aux messages privées, ni aux messages plein de fautes...
Katyucha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 12h27   #11
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 8 227
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 8 227
Points : 11 350
Points : 11 350
pas de perleens pour me dire si mon script est nul
__________________
Pensez toujours aux cours, FAQ Perl et la fonction recherchez!!!!!!!!
Lisez les règles du forum Perl.

Aucun problème par MP, merci de poster vos questions dans les sous forums dédiés et rendez vos codes sources lisibles
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 12h27   #12
Membre Expert
 
Avatar de gnto
 
Homme
Consultant informatique
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 1 182
Points : 1 182
Citation:
Envoyé par laurentschneider
rm -f /mails/* ne fonctionnera pas s'il y a trop de fichiers.
Ah ! Connais-tu la limite ? Est-ce mal codé ? Ce bug est-il connu, repertorié ?
gnto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 12h31   #13
Expert Confirmé
 
Avatar de Katyucha
 
Inscription : mars 2004
Messages : 3 053
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mars 2004
Messages : 3 053
Points : 2 933
Points : 2 933
C'est connu (en tout cas chez Sun)
La limite est difficile à "calculer"

Quand tu met *, le système modifie le * par la liste des fichiers.
Donc dans le code, tu dois atteindre la limite du tableau. (faut bien une limite quand même:p)

Il faut savoir que j'étais à 60 000 fichiers sans problème. A partir de 65 000 j'avais l'erreur. Les noms de fichiers étaient sur 11 caractères (importation d'une plateforme NT)
__________________
Ancien Rédacteur Linux && Unix / Nouveau retraité de DVP
The UNIX way of sex:
gunzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

Je ne réponds ni aux messages privées, ni aux messages plein de fautes...
Katyucha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 12h51   #14
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 892
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 892
Points : 4 437
Points : 4 437
en testant la limite sur AIX, j'ai vu la chose suivante

jusqu'à 3703 fichiers, ça marche.
entre 3704 et et 3719 ça bugge (Process Killed)
à plus de 3720 ça retourne une erreur

mais ça dépend de ta syntaxe (et d'autres paramètres). Il me parait sûr de dire que jusqu'à 255 paramètres c'est OK
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 13h31   #15
Membre confirmé
 
Inscription : octobre 2005
Messages : 338
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 338
Points : 265
Points : 265
Sur AIX, la commande suivante fonctionne sans problèmes:

Citation:
# find mails -type f | xargs -I{} rm -f {}
Après, l'option "I" n'est pas la même sous linux ... Je crois que c'est "i", de mémoire, mais à vérifier.
usf70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 14h12   #16
Rédacteur
 
Inscription : mars 2004
Messages : 1 300
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 300
Points : 1 450
Points : 1 450
Code :
1
2
 
find mails -type f -exec rm -f {} \;
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 14h47   #17
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 181
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 181
Points : 2 441
Points : 2 441
Citation:
Envoyé par MarcG
Code :
1
2
 
find mails -type f -exec rm -f {} \;
Cette solution est en général efficace et passe partout. Elle n'a qu'un inconvénient : une profusion de processus rm est lancée (un par fichier !).

C'est pour cela que je préfère une petite astuce avec Perl :
Code :
find mails -type f -print0 | perl -n0e 'unlink'
Brutal, mais efficace (reste long, quand même, à cause du find).
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 17h09   #18
Membre à l'essai
 
Inscription : janvier 2004
Messages : 124
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 124
Points : 21
Points : 21
Citation:
Envoyé par MarcG
Code :
1
2
 
find mails -type f -exec rm -f {} \;


Merci, c'est ce que j'ai utilisé et ça a marché à la perfection.
Krispy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 06h00.


 
 
 
 
Partenaires

Hébergement Web