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 GNU Discussion :

Script shell purge fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Par défaut Script shell purge fichiers
    Bonjour,
    Je me lance dans le monde Unix et je rencontre un petit problème sur un script qui effectue la purge d'un folder.
    Le script actuel va supprimer les fichiers présents dans un répertoire, s'ils n'ont pas été modifiés depuis 175 jours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/usr/bin/ksh
    DIR="/web/reports/"
    cd $DIR
    /usr/bin/find $DIR -type f -a -mtime +175 -ls -exec /usr/bin/rm {} \;
    Ce script permet donc de supprimer les fichiers qui n'ont pas été modifiés pendant 175 jours dans le folder "/web/reports/".

    Je cherche à ajouter une condition :
    Que ce script s'effectue sauf pour le folder "/web/reports/report".

    Comment m'y prendre pour ajouter cette condition ??

    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Normalement avec l'option "-prune" de find ça devrait le faire (j'ai rajouté "echo..." histoire de tester si le résultat est conforme à tes attentes, à retirer si les tests sont convaincants) .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/bin/find $DIR \( -name report -prune \) -o \( -type f -mtime +175 \) -exec echo "/usr/bin/rm {}" \;
    Par contre dans ta syntaxe, le "-a" et "-ls" n'était pas indispensable...


  3. #3
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Bonjour,

    On peut faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DIR="/web/reports/"
    cd $DIR
    find $DIR -type f -a -mtime +175 | grep -v -e '^'$DIR'report\/' | {
        while read -r line ; do
            echo "$line"
    	rm "$line"
        done
    }
    Je pense que d'autres proposeront des solutions plus adaptées.

    Lilian.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    une p'tite recherche sur Développez, et on remercie ericduval.

    aussi, pourquoi ne pas utiliser -delete plutôt que -exec...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Par défaut
    Grand merci à vous !!!
    Je vais tester cela et vous tiens informé !

  6. #6
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Par défaut
    Salut,

    Normalement avec l'option "-prune" de find ça devrait le faire (j'ai rajouté "echo..." histoire de tester si le résultat est conforme à tes attentes, à retirer si les tests sont convaincants) .

    Code :
    /usr/bin/find $DIR \( -name report -prune \) -o \( -type f -mtime +175 \) -exec echo "/usr/bin/rm {}" \;
    Par contre dans ta syntaxe, le "-a" et "-ls" n'était pas indispensable...
    C'est presque bon, mais il me reste un souci dans le cas ou un fichier pourte le nom Report.

    J'ai fais un petit test :
    - J'ai créé 3 folder t1, t2 et t3 dans /export/home/efanet/temp
    - Dans le folder t1 : j'ai mis fichiers toto1.txt et toto2.txt
    - Dans le folder t2 : j'ai mis fichiers toto3.txt, toto4.txt ainsi qu'un folder t3
    - Dans le folder t3 : pastouch.txt

    Lorsque je lance la commande :

    /usr/bin/find /export/home/efanet/temp -name t3 -prune -o -type f

    Cela me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /usr/bin/find $ DIR -nefanet@idevel2> /usr/bin/find /export/home/efanet/temp -name t3 -prune -o -type f
    /export/home/efanet/temp/t1/toto1.txt
    /export/home/efanet/temp/t1/toto2.txt
    /export/home/efanet/temp/t2/toto3.txt
    /export/home/efanet/temp/t2/toto4.txt
    /export/home/efanet/temp/t2/t3
    /export/home/efanet/temp/t3
    efanet@idevel2>
    Faut utiliser Grep ?

    Merci

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Rajoute l'option "-print" :

    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
    $ tree                                                        
    .
    |-- t1
    |   |-- toto1.txt
    |   `-- toto2.txt
    |-- t2
    |   |-- t3
    |   |   `-- pastouchaussi.txt
    |   |-- toto3.txt
    |   `-- toto4.txt
    `-- t3
        `-- patouch.txt
    
    4 directories, 6 files
    
    $ find . \( -name t3 -prune \) -o \( -type f -print \)
    ./t2/toto4.txt
    ./t2/toto3.txt
    ./t1/toto2.txt
    ./t1/toto1.txt
    
    $ find . \( -name t3 -prune \) -o \( -type f \)
    ./t3
    ./t2/toto4.txt
    ./t2/toto3.txt
    ./t2/t3
    ./t1/toto2.txt
    ./t1/toto1.txt
    $

  8. #8
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Rajoute l'option "-print" :

    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
    $ tree                                                       
    .
    |-- t1
    |   |-- toto1.txt
    |   `-- toto2.txt
    |-- t2
    |   |-- t3
    |   |   `-- pastouchaussi.txt
    |   |-- toto3.txt
    |   `-- toto4.txt
    `-- t3
        `-- patouch.txt
     
    4 directories, 6 files
     
    $ find . \( -name t3 -prune \) -o \( -type f -print \)
    ./t2/toto4.txt
    ./t2/toto3.txt
    ./t1/toto2.txt
    ./t1/toto1.txt
     
    $ find . \( -name t3 -prune \) -o \( -type f \)
    ./t3
    ./t2/toto4.txt
    ./t2/toto3.txt
    ./t2/t3
    ./t1/toto2.txt
    ./t1/toto1.txt
    $



    Grand merci !!!
    Désolé je suis novice, je m'apercois que j'ai encore énormément à apprendre !

    Merci à vous !!!

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

Discussions similaires

  1. Scripting shell lecture fichier
    Par houmad91 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 19/02/2014, 17h12
  2. Script shell copie fichier en fonction de leur nom
    Par Borowsky dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/12/2009, 09h27
  3. Réponses: 7
    Dernier message: 30/05/2006, 14h08
  4. Script shell et fin de fichier
    Par jeff_! dans le forum Linux
    Réponses: 11
    Dernier message: 25/05/2006, 22h02
  5. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48

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