Forum Linux.débutant Script de purge

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-3
28
fév.
2016

Bonjour à tous

Voila dans le cadre d'une purge de fichier pdf, je dois réaliser un script de nettoyage. Jusque la pas de problème mais je rencontre des difficultés.

Contexte:

J'ai une arborescence de plusieurs dossiers nommées numériquement de 1 à 500. Dans ces dossiers, il y a différents sous dossiers contenant des fichiers PDF.

But:

Réaliser sur les dossiers de plus de 60 jours, la suppression des différents sous-dossiers, en gardant un exemplaire du sous-dossier le plus vieux.

Pourriez-vous m'aider s'il vous plait ?

Un grand merci.
```

  • # lire le cours ?

    Posté par  . Évalué à 6.

    ca ressemble fort à un exercice de cours.
    et comme ca rapidement, je dirais qu'il te faut utiliser find pour trouver :
    - les dossiers
    - de plus de 60jours
    - effacer le contenu du dossier qu'on vient de trouver

  • # Script de purge

    Posté par  . Évalué à 1.

    Merci d'avoir pris le temps de me répondre, j'ai oublier de mettre la commande que j'utilise pour cela:

    find /mon_chemin/ -maxdepth 1 -type d -name '[0-9][0-9][0-9]' -mtime +60 | while read folder; do echo "Traitement du dossier:"$folder; cd $folder/; ls -tr | head -n2 | xargs tar cvf archive.tar; done

    Elle fonctionne bien, mais manque la partie pour supprimer les sous-dossiers et je vois pas trop comment l'incorporer dans ma commande.

    Je suis un peu perdu :(

    • [^] # Re: Script de purge

      Posté par  . Évalué à 3. Dernière modification le 02 mars 2016 à 18:00.

      peut-etre faut-il ecrire le script de maniere plus conventionnelle

      find /mon_chemin/ -maxdepth 1 -type d -name '[0-9][0-9][0-9]' -mtime +60 | \
      while read folder
      do
        echo "Traitement du dossier:"$folder
        cd $folder/
        ls -tr | head -n2 | xargs tar cvf archive.tar
      done

      on voit alors que ton script :
      - cherche find
      - dans l'emplacement /mon_chemin/
      - avec 1 sous dossier -maxdepth 1
      - les dossiers -type d
      - dont le nom -name est composé de 3 chiffres [0-9][0-9][0-9]
      - et dont la modification remonte à plus de 60jours -mtime +60

      pour chaque dossier while read folder
      tu rentres dedans cd $folder
      tu listes son contenu ls -tr
      tu prends les 2 premieres lignes head -n2 (attention ce ne sont pas forcement les plus ancien car l'affichage de fait en colonne)
      tu donnes les 2 lignes à xargs pour qu'il fasse une archive.

      et bien pour ta suppression, qu'est-ce qui t'empeche de faire en plus un ls -lr | head -n2 | xargs rm ?

  • # Suite Purge

    Posté par  . Évalué à 1. Dernière modification le 02 mars 2016 à 19:55.

    Merci pour vos réponses:

    Je bloque pour la suppression, car je ne vois pas comment dire à rm de supprimer tous les sous-dossiers hormis l'archive (archive.tar) precedemment crée.

    Le xargs sera exécuté dans des dossiers differents du fait que l'on soit dans une boucle.Je ne vois pas comment il ppourra ecraser une archive deja existant.

    Prenons 2 dossiers 400 et 500, dans un premier temps il va rentrer dans le dossier 400, va faire un tar des 2 premiers fichiers, puis va passer au dossier 500 et faire un autre tar et ainsi de suite.

    Ca se passe comme cela normalement?

    • [^] # Re: Suite Purge

      Posté par  . Évalué à 3.

      car je ne vois pas comment dire à rm de supprimer tous les sous-dossiers hormis l'archive (archive.tar) precedemment crée.

      ben en faisant un rm des memes dossiers que tu as mis dans l'archive,
      donc en utilisant la meme methode, probablement ls -tr | head -n2 | xargs rm

  • # Script purge

    Posté par  . Évalué à 1.

    Imaginons que dans le dossier 500, il y ait une soixantaine de sous-dossiers, je prends les deux premiers dossiers et fait une archive dessus.
    Cependant en lancant le rm, je n'effacerai que les deux premiers dossiers, alors que je souhaite effacer tous les sous dossiers et laisser seulement l'archive.

    • [^] # Re: Script purge

      Posté par  . Évalué à 2.

      donc en gros tu sauvegardes les 2 premiers, et tu effaces les autres ?
      donc tu perds des données ?

  • # script purge

    Posté par  . Évalué à 1.

    Personne peut m'aider
    UP merci

  • # Script purge

    Posté par  . Évalué à 1. Dernière modification le 08 mars 2016 à 20:11.

    Bon j'ai finalement trouver la solution à mon problème.
    je mets le code au cas ou cela pour etre utile pour d'autre.

    find /chemin/ -maxdepth 1 -type d -mtime +60 -name '[0-9][0-9][0-9]' | while read folder
    do
      echo "Traitement du dossier:"$folder
      cd $folder/
      ls -tr | head -n2 | xargs tar cvf archive.tar
      find $folder/* ! -name 'archive.tar' -exec rm -rf '{}' \;
     done

    Merci à tous.

    • [^] # Re: Script purge

      Posté par  . Évalué à 2.

      je persiste à dire que ton script est bizarre.

      si tu as 50 fichiers dans le dossier, tu ne prend que les 2 premieres lignes de ls -tr que tu mets dans l'archive
      et tu effaces les autres ?

      si les fichiers ont des noms numeriques, tu peux remplacer ton
      find $folder/* ! -name 'archive.tar' -exec rm -rf '{}' \;

      par un
      rm -rf [0-9]*

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.