[shell] Manipuler les dates

Fermé
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 - 1 juil. 2005 à 14:32
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 8 nov. 2011 à 14:36
Bonjour,

Comment faire les manips suivantes en shell unix :
1) récupérer la date de création d'un fichier
2) Faire des opérations sur les dates : calculer le nombre de jours (ou de mois) séparant 2 dates.

Merci d'avance
A voir également:

2 réponses

Bonjour

Pour manipuler les fichiers par date, on peut aussi utiliser la commande find

find . -atime +3 donne tous les fichiers non accédées depuis 3 jours

man find donne tous les paramétres de manipultation de date de fichiers
1
pour les dates de creation modification etc... d'un fichier tu peux utiliser touch

pour les operation ben là faut jouer sois même
avec date cut expr pour adapter à tes besoins..

expr `date +"%d"` + 2 

te donnera le n° du jour +2 (soit le 3)

tu dois tester les mois pairs et impairs et les années bisextiles etc...

avec quelques if ça suffit largement...

man KSH pour voirs les proprietées des scripts et les syntaxes des tests "if"
-2
Certes, on peut s'embêter avec du date +%d cependant
$(('date +"%j"' + 2))

Donnera le numéro du jour dans l'année +2 ce qui permet de s'affranchir des changements de mois et des année bisextiles. Il faut juste prévoir les changements d'année à l'aide d'un "if" comparant des " 'date +%Y' "

Pour ma part, j'ai un problème concernant la génération d'une extraction de résultat de commade last, exploité ensuite par un script.
Le but serait de détecter les éventuels reboots survenus dans les X derniers jours.
Je pars d'un
last | grep "reboot"

rien de bien sorcier jusque là ...
cependant la date affichée par la commande n'est pas paramétrable ce qui complique largement la chose.
D'où ma question : Est-il possible de manipuler du format date dans des variables, sans toucher à la date système ? (injection d'une valeur dans un format donné, puis récupération dans un autre : pour le cas qui m'intéresse l'injecter en "%b %d" pour le récupérer en %j)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
8 nov. 2011 à 14:30
Salut,

$ date -d 'Tue Nov 8' +%j
312

;-))
0
Bonjour,

A mon avis en shell tu vas avoir du mal. Par contre la plupart des langages proposent une fonction strptime. Tu peux peut-être faire un oneliner en Perl ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
8 nov. 2011 à 14:36
hello
pour avoir tout les reboot en Mois Jour Jour de l'année
$ last | awk '/reboot/  {print $5, $6, $7, $8}' | xargs -I{} date -d "{}" +"%b %d %j"
0