[shell] Manipuler les dates

jebok Messages postés 358 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
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

EK
 
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
francis
 
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
Dwarf
 
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   Statut Contributeur Dernière intervention   6 431
 
Salut,

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

;-))
0
gm
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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