IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Effacer un très gros repertoire


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 124
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 124
    Par défaut
    oué, j'aurais du préciser. merci de ta réponse.

    malhereusement, cette commande échoue
    elle rame et mouline pendant des heures sans resultat

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    tu veux un script perl qui t'efface tes fichiers puis repertoires?

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 124
    Par défaut
    euh. bah juste les millions de fichiers contenus dans ce repertoire. mais faire tt un script pr ça, c'est ptet lourd.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
    }

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    y avait des conneries dans le scripts, mets celui ci, je l'ai testé et optimisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  8. #8
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    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

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  10. #10
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Par défaut
    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

  11. #11
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    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é ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Effacer tous les fichiers d'un repertoire
    Par alcofribas dans le forum Général Python
    Réponses: 2
    Dernier message: 22/07/2009, 14h27
  2. rsync gros repertoire
    Par djibril dans le forum Réseau
    Réponses: 4
    Dernier message: 18/06/2008, 19h39
  3. Effacer tout le contenue d'un repertoire.
    Par Traxsilver dans le forum C++Builder
    Réponses: 5
    Dernier message: 13/06/2008, 21h06
  4. Effacer qu'un type de fichiers dans un repertoire
    Par petiteso dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 12/01/2007, 14h57
  5. [Vbs] effacer tous les fichier d'un repertoire
    Par darksnake dans le forum VBScript
    Réponses: 4
    Dernier message: 04/10/2006, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo