Info statistiques sur un fichier Unix

Fermé
karlus79 Messages postés 5 Date d'inscription mercredi 15 février 2006 Statut Membre Dernière intervention 16 février 2006 - 16 févr. 2006 à 00:19
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 17 févr. 2006 à 11:21
Bonjour,
Voici mon problème : je souhaite connaitre une fonction unix pour afficher les statistiques d'un fichier sous Unix (SunOS). J'entends par là connaître sa date de dernière modification. Je connais la fonction "stat" en C (include stat.h) mais je veux utiliser un shell seul. Je connais aussi la fonction shell "ls -al" mais cela ne me convient pas non plus car le format d'affichage renvoyé n'est pas satisfaisant (Month Day hh:mi ou Month Day Year).
Donc existe-t-il une façon de faire en shell pour connaître la date de modification au format complet YYYYMMDD hhmiss ?
Merci
A voir également:

12 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
16 févr. 2006 à 00:38
Je ne sais pas quelle est ta distribution. Debian contient l'outil ... stat
qui fait vraissemblement appel à stat(2)
johand@horus:~$ touch brol
johand@horus:~$ lastmod=$(stat -c '%y' brol |cut -b -19)
johand@horus:~$ echo $lastmod
2006-02-16 00:31:12

doit faire ton bonheur.
johand@horus:~$ dpkg -S $(which stat)
coreutils: /usr/bin/stat

--> package coreutils , donc pas de soucis avec Debian

En faisant une rapide recherche , je vois qu'il existe un paquage coreutils pour Suze.
Si tu utilises une distribution basée sur rpm, , stat est peut-être déjà disponible, ou un paquage 'coreutils' est sans doute disponible.
Johan
0
karlus79 Messages postés 5 Date d'inscription mercredi 15 février 2006 Statut Membre Dernière intervention 16 février 2006
16 févr. 2006 à 09:41
Merci pour ton intervention, mais ça ne marche toujours pas :
ksh: stat: not found
La fonction "stat" n'est pas reconnue : ce n'est pas un commande shell...
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
16 févr. 2006 à 09:45
Pourquoi ne te contentes tu pas simplement de reformater dans ton script la sortie de ls -l avec des cut ou des awk ?

Bonne chance
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
16 févr. 2006 à 09:50
... et transformer le format de date proposé dans le format qui te convient avec la commande "date".


Dal
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
karlus79 Messages postés 5 Date d'inscription mercredi 15 février 2006 Statut Membre Dernière intervention 16 février 2006
16 févr. 2006 à 10:18
J'ai essayé avec ls -l
Voici le résultat :
-rw-r--r-- 1 ksab sco 9 Dec 15 2004 fic.txt
-rw-r--r-- 1 ksab sco 0 Aug 19 2005 t1.txt
-rw-r--r-- 1 ksab sco 326 Feb 14 17:34 test.c

Les vieux fichiers ont un format date = mois jour annee
alors que les fichiers récents ont un format mois jour heure:minute
Ce n'est pas très homogène !! On a 2 formats de date selon que le fichier est récent ou ancien !!
N'ayant pas le package coreutils sur la machine Sun, je ne peux pas utiliser la fonction stat...
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
16 févr. 2006 à 10:30
Et si tu faisais ce que moi et [Dal] te proposons ?
0
karlus79 Messages postés 5 Date d'inscription mercredi 15 février 2006 Statut Membre Dernière intervention 16 février 2006
16 févr. 2006 à 11:09
Merci pour votre aide mamiemando et Dal.
L'utilisation de ls -l était bien ma 1ere idée mais comme je l'ai dit, ça ne marche pas à tous les coups. Je détaille mon explication :

1er ls sur un VIEUX fichier : ls -l fic.txt
-rw-r--r-- 1 ksab sco 9 Dec 15 2004 fic.txt

2eme ls sur un fichier RECENT : ls -l test.c
-rw-r--r-- 1 ksab sco 326 Feb 14 17:34 test.c

Comme on peut le voir, le 1er ls me donne un format de date différent du 2eme ls...

L'utilisation de ls -l ne me garantit pas un affichage de la date avec un format parfaitement identifiable puisque un coup j'ai un format <Month> <Day> <Year>, un coup j'ai un format <Month> <Day> <Heure>:<Minute>
Moi, j'aimerais bien connaitre une façon de faire pour qu'au final, j'ai toujours un format complet du style <Year> <Month> <Day> <Heure> <Minute>
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 févr. 2006 à 13:38
Salut,

Essaie avec :
ls --full-time
"man ls" ... y'a tout ce qu'il faut dedans ;-))
0
karlus79 Messages postés 5 Date d'inscription mercredi 15 février 2006 Statut Membre Dernière intervention 16 février 2006
16 févr. 2006 à 14:12
L'option--full-time n'est pas dispo dans mon OS (SunOS 5.8).
Je ne dispose pas des packages fileutils ou coreutils qui autorisent cette option --full-time !

Voici la seule syntaxe possible avec mon ls :
SYNOPSIS
/usr/bin/ls [ -aAbcCdfFgilLmnopqrRstux1 ] [ file ... ]

/usr/xpg4/bin/ls [ -aAbcCdfFgilLmnopqrRstux1 ] [ file ... ]

donc pas d'option --full-time : dommage !

Bon, je crois sincèrement qu'il n'y a pas de solution shell sans utiliser les packages mentionnés ci-dessus, ni sans passer par un développement en C (utilisation de la fonction stat).

Je crois que c'est la conclusion... Je baisse les bras !
Merci à tous pour votre participation et votre aide.
0
Salut,

Y'en a pas pour long à installer coreutils mais bon...
Avec find, ça peut passer peut-etre (C'est pas plus une commande de ksh, mais j'ose espéré qu'elle est installée)
find . -name ton_fichier -printf %t\\n
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
17 févr. 2006 à 09:20
Sinon tu peux faire un script python ou perl, qui sera portable en plus, et qui parse le résultat de ls -l à l'aide d'une regexp par format de date. Mais bon ça force à avoir installé python ou perl donc au final tu as sans doute meilleur temps d'installer les core-utils...
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
17 févr. 2006 à 11:07
Avec un script, awk, un test et date, on peut s'en sortir.

Voilà un exemple en bash, traitant une ligne issue de "ls -al" passée en argument :

$ cat testdate.sh
#!/usr/local/bin/bash

ST="$1"

FICHIER=`echo $ST | awk '{ print $9 }'`
LADATE=`echo $ST | awk '{ print $6 " " $7 " " $8 }'`

if [ "$LADATE" != "  " ]
then
  echo -n "date de $FICHIER : "
  if [ "`echo $LADATE | sed 's/\(.*\)\(:\)\(.*\)//'`" = "" ]
  then
    date -j -f "%b %d %R" "$LADATE" +"%F %T"
  else
    date -j -f "%b %d %Y" "$LADATE" +"%F"
  fi
else
  echo "$ST ne semble pas comporter de date"
fi

$ ls -al | sed 's/^\(.*\)$/\"\1\"/' | xargs -L 1 ./testdate.sh


La commande ci-dessus passe les lignes renvoyées par "ls -al" en argument entre guillements au script, et interprète les dates dans le format voulu dans tous les fichiers du répertoire courant. Celà fonctionne sur ma machine FreeBSD.


Dal
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
17 févr. 2006 à 11:21
La version "date" de Linux a des commandes légèrement différentes, et les tests sur la date peuvent être écrits sans avoir à décrire le format en entrée, respectivement comme ceci, selon que l'heure soit disponible ou pas :

date -d "$LADATE" +"%F %T"
date -d "$LADATE" +"%F"

Remplacer également la première ligne par "#!/bin/bash", emplacement habituel de bash sous Linux.


Dal
0