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 24/05/2011, 17h56   #1
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 3
Points : 4
Points : 4
Par défaut [BASH] Test sur les dates

Bonjour,

Je dois créer un script qui dans un certain nombre de dossiers prédéfinis, efface tous les fichiers logs qui sont vieux de, par exemple plus de 15 jours.

Leur syntaxe est la suivante :
nom_log.logs.date => testlog.logs.2011-04-24

J'ai donc créé le script suivant (les tests à la fin ne sont bien évidemment pas complets, ne pas en tenir compte) :
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
 
#!/bin/bash
year=$(date '+%Y')
month=$(date '+%m')
day=$(date '+%d')
 
echo -e "Date d\'aujourd\'hui : $day / $month / $year\n"
 
for fic in *
do
 
#Année/Mois/Jour du fichier de log
year_file=$(echo $fic | cut -f3 -d . | cut -f1 -d -)
month_file=$(echo $fic | cut -f3 -d . | cut -f2 -d -)
day_file=$(echo $fic | cut -f3 -d . | cut -f3 -d -)
 
let "diff_year=year-year_file"
let "diff_month=month-month_file"
let "diff_day=day-day_file"
 
#test chaine vide pour les fichiers non logs
if  [ -z $year_file ] ; then
echo -e "$fic : Fichier à conserver\n"
elif (($diff_year !=0)); then
echo -e "$fic : Fichier à supprimer\n"
else
echo -e "$fic : Fichier à conserver\n"
fi
done
J'arrive à extraire l'année, le mois et le jour de chaque fichier. Mais mon problème est que je n'arrive pas à établir de règle efficace concernant les tests à faire sur les "diff_year, diff_month, diff_day" pour l'effacement ou non des fichiers, en prenant en compte le changement d'un mois à l'autre, d'une année à une autre ... ( on ne peut pas simplement faire un diff_year!=0 et tout effacer, si on lance le script le 1er janvier et que le log date du 31 décembre).

Voilà voilà, si quelqu'un a une solution ou une autre manière de procéder ...

Merci !
pdavid est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/05/2011, 07h13   #2
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 153
Points : 4 153
Bonjour,

Code BASH :
1
2
3
4
5
6
7
8
9
dateYa15jours=$(date -d-15days +'%Y%m%d')

for fichier in *
do #ne pas oublier de tester s'il s'agit bien d'un fichier
   fic="${fichier##*.}" #voir dans le man bash : Remplacement des paramètres
   if (( ${fic//-/} < dateYa15jours ))
   then echo "$fic"
   fi
done
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 25/05/2011, 13h51   #3
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Question con : les fichiers d'il y a 15 jours, ils ne datent pas (physiquement) d'il y a 15 jours ?

Parce que si c'est le cas, un find . -mtime +14 devrait suffire
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/05/2011, 16h23   #4
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 3
Points : 4
Points : 4
Effectivement ça peut simplifier beaucoup les choses, je ne connaissais pas l'option -mtime de la commande find (je suis encore trop jeune pour avoir lu les man de toutes les commandes en entier xD). J'ai juste à modifier la manière dont je traite le résultat de la commande.

Merci beaucoup !
pdavid est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/05/2011, 17h04   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Citation:
Envoyé par pdavid Voir le message
Effectivement ça peut simplifier beaucoup les choses, je ne connaissais pas l'option -mtime de la commande find (je suis encore trop jeune pour avoir lu les man de toutes les commandes en entier xD). J'ai juste à modifier la manière dont je traite le résultat de la commande.

Merci beaucoup !
quand tu connaitras toutes les man pages par coeur, y compris les private jokes qu'elles contiennent, tu seras un dieu
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 17h14   #6
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Selon ce que tu souhaites faire ensuite, jette donc un oeil à l'option -exec de find si tu ne connais pas non plus :p

(et t'inquiètes pas, même dans 50 ans, tu auras toujours des trucs à découvrir sur des commandes de bases...)
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h22.


 
 
 
 
Partenaires

Hébergement Web