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

Shell et commandes POSIX Discussion :

Script UNIX purge répertoire


Sujet :

Shell et commandes POSIX

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Script UNIX purge répertoire
    Bonjour,

    Je souhaite "purger" un répertoire sur un serveur HP-UX.

    J'ai exécuté la commande suivante > find $REP -type f -mtime $JOURS -print -exec rm -f {} \; >>$LOGFILE 2>&1.

    Ça fonctionne bien sauf qu'il y a tellement de fichiers dans ce répertoire que la commande va tourner pendant des semaines.

    Je souhaiterai donc le faire par paquet de 10.000 fichiers mais je ne sais pas comment ajouter un compteur ou autre pour qu'il s'arrête une fois qu'il a trouvé les 10.000 fichiers pour les supprimer.

    Avez-vous des idées svp ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Pour accélérer la suppression, il est possible de regrouper automatiquement les arguments de la commande exec en remplaçant "\;" par "+" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find $REP -type f -mtime $JOURS -print -exec rm -f {} + >>$LOGFILE 2>&1
    ɹǝsn *sıɹɐlos*

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Pour accélérer la suppression, il est possible de regrouper automatiquement les arguments de la commande exec en remplaçant "\;" par "+" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find $REP -type f -mtime $JOURS -print -exec rm -f {} + >>$LOGFILE 2>&1
    Merci pour votre réponse je vais tester comme ça.

    Que signifie le "+" à la place du "\" ?

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    C'est en fait un "+" à la place d'un ";".

    J'ai indiqué ce qu'elle fait: « regrouper automatiquement les arguments de la commande exec », c'est à dire que find va construire la ligne de commande la plus longue possible en concaténant les noms de fichiers puis l'exécuter, et recommencer jusqu'à ce qu'il n'y ait plus de fichiers à traiter.

    Sans cette syntaxe, find appelle la commande pour chaque fichier trouvé, ce qui est moins efficace.
    ɹǝsn *sıɹɐlos*

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    C'est en fait un "+" à la place d'un ";".

    J'ai indiqué ce qu'elle fait: « regrouper automatiquement les arguments de la commande exec », c'est à dire que find va construire la ligne de commande la plus longue possible en concaténant les noms de fichiers puis l'exécuter, et recommencer jusqu'à ce qu'il n'y ait plus de fichiers à traiter.

    Sans cette syntaxe, find appelle la commande pour chaque fichier trouvé, ce qui est moins efficace.
    Très bien j'ai relancé la commande find $REP -type f -mtime +$JOURS -print -exec rm -f {} \+ >>$LOGFILE 2>&1 je vais voir ce que ça donne.

    Merci pour votre réponse.

  6. #6
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Le traitement continuait toujours de tourner et le fichier de logs toujours vide.

    Comment ajouter un compteur ou autre pour qu'il s'arrête une fois qu'il a trouvé les 10.000 fichiers pour les supprimer ?

    Avez-vous des idées svp ?

    Merci d'avance pour votre aide.

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Hmm, au bout de trois jours, le script n'a toujours rien sorti dans $LOGFILE ??

    Un truss devrait permettre de savoir ce que fait le find:

    ɹǝsn *sıɹɐlos*

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Hmm, au bout de trois jours, le script n'a toujours rien sorti dans $LOGFILE ??

    Un truss devrait permettre de savoir ce que fait le find:

    Non en effet le fichier de logs était toujours vide. Je voyais bien le find tourner en faisant un ps -efl | grep find. Le find ne tourne plus car le serveur redémarre automatiquement tous les dimanches (je n'ai pas la main là-dessus, cela nous est imposé).

    Je vais relancer la commande find $REP -type f -mtime +$JOURS -print -exec rm -f {} \+ >>$LOGFILE 2>&1 et vérifier dans la journée avec un truss -p $(pgrep find) ce que fait le find.

    Merci pour votre réponse.

  9. #9
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    La commande truss -p $(pgrep find) n'a pas fonctionné. Truss ne semble pas installé sur ce serveur. Ce n'est pas très grave.

    J'ai testé la commande find $REP -type f -print -exec ll {} \; >>$LOGFILE 2>$1 (il y a tellement de fichiers dans ce répertoire que la commande ls classique ne fonctionne pas). Ça va me permettre de comparer avant et après la commande find $REP -type f -mtime +$JOURS -print -exec rm -f {} \+ >>$LOGFILE 2>&1 pour voir si elle a bien fonctionné en fonction de la condition -mtime que j'aurai spécifié.

    En résultat j'ai donc la liste de tous les fichiers de ce répertoire avec leur date et taille (environs 160.000 fichiers...).

    J'ai des fichiers avec comme date 23 janv 2015 par exemple et d'autres avec comme date 10 févr 16:50 ou encore 16 déc 15:23.

    Pour les fichiers avec des date comme 10 févr 16:50 ou encore 16 déc 15:23, il n'y a pas de risque d'erreur quant à l'année ? 16 déc 15:23 veut forcément dire 16 déc 15:23 2015 et non pas 2014 par exemple ?

  10. #10
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Oui, la date affichée n'inclut l'année que si le fichier à été modifié il y a plus de six mois ou s'il à été modifié dans le futur ...
    ɹǝsn *sıɹɐlos*

  11. #11
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Oui, la date affichée n'inclut l'année que si le fichier à été modifié il y a plus de six mois ou s'il à été modifié dans le futur ...
    Très bien merci.

    Je pense que ma commande de départ fonctionnait mais qu'il ne reste que des fichiers d'un an maximum. Et dans ma commande $JOURS = 485.

    Je vais me débrouiller avec tout ça.

    Merci pour votre aide.

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

Discussions similaires

  1. [Debutant] [Script] Lister un répertoire
    Par ghohm dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 13/09/2006, 16h35
  2. Avantages des scripts Perl par rapport au script UNIX ?
    Par MonsieurAk dans le forum Langage
    Réponses: 4
    Dernier message: 23/01/2006, 14h34
  3. Script Unix
    Par ujoodha dans le forum Linux
    Réponses: 13
    Dernier message: 02/12/2005, 16h15
  4. [Unix] Purge de lignes vides (blanches)
    Par f@t@l error dans le forum Autres langages
    Réponses: 2
    Dernier message: 15/03/2005, 19h12
  5. Little Script UNIX ==> A Passer sous Windows
    Par argoet dans le forum Windows
    Réponses: 5
    Dernier message: 15/11/2004, 16h36

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