Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 10h45   #1
Invité régulier
 
Jicay Guillaume
Inscription : mai 2010
Messages : 25
Détails du profil
Informations personnelles :
Nom : Jicay Guillaume

Informations forums :
Inscription : mai 2010
Messages : 25
Points : 5
Points : 5
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 :
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.
jicaygg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 11h04   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
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...

zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/02/2011, 11h05   #3
Membre éclairé
 
Homme Lilian Herault
Architecte technique
Inscription : juin 2010
Messages : 215
Détails du profil
Informations personnelles :
Nom : Homme Lilian Herault
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Architecte technique
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 215
Points : 335
Points : 335
Bonjour,

On peut faire ça :

Code :
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.
lilian_h est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 11h07   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 146
Points : 4 146
Bonjour,

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

aussi, pourquoi ne pas utiliser -delete plutôt que -exec...
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 02/02/2011, 11h33   #5
Invité régulier
 
Jicay Guillaume
Inscription : mai 2010
Messages : 25
Détails du profil
Informations personnelles :
Nom : Jicay Guillaume

Informations forums :
Inscription : mai 2010
Messages : 25
Points : 5
Points : 5
Grand merci à vous !!!
Je vais tester cela et vous tiens informé !
jicaygg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 14h28   #6
Invité régulier
 
Jicay Guillaume
Inscription : mai 2010
Messages : 25
Détails du profil
Informations personnelles :
Nom : Jicay Guillaume

Informations forums :
Inscription : mai 2010
Messages : 25
Points : 5
Points : 5
Citation:
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 :
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
jicaygg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 14h43   #7
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Rajoute l'option "-print" :

Code :
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
$
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 02/02/2011, 15h07   #8
Invité régulier
 
Jicay Guillaume
Inscription : mai 2010
Messages : 25
Détails du profil
Informations personnelles :
Nom : Jicay Guillaume

Informations forums :
Inscription : mai 2010
Messages : 25
Points : 5
Points : 5
Citation:
Envoyé par zipe31 Voir le message
Rajoute l'option "-print" :

Code :
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 !!!
jicaygg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 15h25   #9
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par jicaygg Voir le message


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

Merci à vous !!!
De rien

On a tous commencé un jour
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h27.


 
 
 
 
Partenaires

Hébergement Web