Différence entre 2 dates (Aix/KSH)

Fermé
akouatic17 - 6 sept. 2007 à 21:16
 jidé - 20 févr. 2008 à 15:50
Bonsoir,

Désolé, après avoir parcouru le forum, je reconnais que cela n'est pas très originale comme question mais je n'ai pas trouvé de réponse sur le forum qui fonctionne (ex : diffdate, date -d, etc ne fonctionnent pas).

Contexte : Je suis sur Unix (Aix) et je développe en KSH (uniquement).

Besoin : Je souhaite mettre en place une purge de fichiers de plus de 5jours.
Les fichiers sont du type xxx_20070906.EXT où xxx est une chaine de caractères variable et où EXT=dat, ctl, txt, etc. (extensions non fixes car différents types de fichiers)

Solution envisagée :
- Je récupére le quantième de la date du jour (date "+%j")
- Je récupère le quantième de la date du fichier (extraction/transformation de la date du nom du fichier)
- Je compare les 2 et si on est > 5jours, je supprime

Pb : Comment calculer un quantième sur une date du type 20070905 stockée dans une variable de type $DT_FILE ???

NB : Je "ne souhaite pas" de solution en perl car je ne connais pas.

Merci de votre aide...

Cordialement.
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
6 sept. 2007 à 21:56
Salut,
[tmpfs]$ var="20070905"

[tmpfs]$ date --date="$var" '+%j'

248

[tmpfs]$
;-))
2
for fic in $(ls); do echo $fic $( date --reference=$fic '+%Y.%j'); done
0
vs n avez pas besoin de recuperer la date du fichier dans une variable ( avec un ls -l ... | awk '{ print $6 $7 $8}'
le 8ème argument peut etre l'heure si le fichier a été crée ou modifié il y a moins d'une année ( donc tu auras à gérer le cas du 8eme paramètre)
le mieux c'est de donner le nom du fichier dans une variable exemple $FICHIER
et tu obtiens l'année et le Quantième ( numéro du jour dans l'année) par la commande date :

DateFic=$(date --reference=$FICHIER '+%Y.%j)

comme cela tu ne louperas pas les fichiers vieux de plus d'une année


c'est l'idée de jipicy qui m'a fit relire le man de la commande date


@+
0
Je sais que je viens un peu après la bataille, mais je suis tombé sur cette discussion par hasard, en cherchant une réponse sur un pb similaire.

Pour supprimer des fichiers vieux de plus de x jours, on peut aussi utiliser un find -exec et -mtime:
find -name "nom_de_fichier" -mtime 5 -exec rm {} \; "path_des_fichiers"

* -mtime n : pour lister les fichiers modifiés depuis n jours,
-atime n : pour lister les fichiers accédés depuis n jours,
* -name pour chercher des fichiers selon leur nom,
-iname pour ne pas tenir compte de la casse (majusc./minusc.)
* -exec applique la commande qui suit à chaque fichier trouvé
{} représente le nom du fichier trouvé
\; permet de terminer la commande (";" avec un \ pour forcer sa prise en compte)

Cela me paraît plus simple que de calculer soi-même des différences de dates...
0