Script bash unix

Bonjour,

J'ai besoin de votre aide afin de faire un petit script qui supprime des répertoires. En effet, le nom de chaque répertoire est une date, du type YYYYMMDD. Je souhaite supprimer tous les fichiers du mois précédents, et à la main je tape rm -rf YYYYMM*, mais je fais ça pour tous les répertoires. Y a t'il un moyen plus simple de réécrire cela dans un script, en lui donnant en paramétre la date YYYYMM*?

l'idéal, ce serait d'exécuter ./mon_script.sh 200905* depuis le répertoire courant, et sachant que tous les répertoire situés dans le répertoire courant contiennent des répertoire YYYYMMDD.

Merci de votre aide,

Cordialement,
Configuration: Windows XP
Firefox 3.0.11

3 réponses

  1. Modérateur
    Salut,

    Essaie ça et vois si ça fait l'affaire (à lancer depuis le répertoire courant comme tu l'as dit toi même) :
    find . -type d -name "200905*" -exec echo "rm -rf {}" \;
    Si c'est les bons répertoires qui sont affichés sur le terminal, on avisera...
    1. Salut,

      ça ne marche pas :(

      voici ce que ça renvoit

      $ ./arkprd02.sh
      rm -rf ./ATS/20090618
      rm -rf ./ATS/20090619
      rm -rf ./ATS/20090620
      rm -rf ./ATS/20090630
      rm -rf ./EBTS/20090618
      rm -rf ./EBTS/20090619
      rm -rf ./EBTS/20090620
      rm -rf ./EBTS/20090630
      rm -rf ./ETC/20090618
      rm -rf ./ETC/20090619
      rm -rf ./ETC/20090620
      rm -rf ./ETC/20090630
      rm -rf ./ETS/20090618
      rm -rf ./ETS/20090619
      rm -rf ./ETS/20090620
      rm -rf ./ETS/20090630

      mais les répertoires existent toujours!

      la commande utilisée : find . -type d -name $(date -d "today - 30 days" +%Y%m)* -exec echo "rm -rf {}" \;

      Merci encore pour ton coup de main!
      1. Modérateur
        Si si ça marche très bien, mais pour ne pas faire de bétises, j'ai demandé un affichage de la commande (echo "rm...") et non pas l'exécution ;-\

        Comme tu peux le voir si on enlève le "echo" il restera les commandes :
        rm -rf ./ATS/20090618
        rm -rf ./ATS/20090619
        rm -rf ./ATS/20090620
        rm -rf ./ATS/20090630
        rm -rf ./EBTS/20090618
        etc.

        Ce qui devrait faire l'affaire, non ?

        PS. Désolé les messages ont été retenus en quarantaine quelques temps ;-((
    2. Salut,

      merci tout d'abord de ton coup de main, mais ça ne marche pas :(

      voici la commande utilisée :

      find . -type d -name $(date -d "today - 30 days" +%Y%m)* -exec echo "rm -rf {}" \;

      Une petite idée encore?
      1. Modérateur
        Enlèves l'espace entre le moins et 30 (today -30 days) et ça devrait aller mieux :
        [tmpfs]$ date -d "today - 30 days" +%Y%m
        200908
        
        [tmpfs]$ date -d "today -30 days" +%Y%m
        200906
        
        [tmpfs]$
        ;-))