Info statistiques sur un fichier Unix
karlus79
Messages postés
5
Statut
Membre
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
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
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
12 réponses
-
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 -
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... -
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 -
... et transformer le format de date proposé dans le format qui te convient avec la commande "date".
Dal -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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... -
Et si tu faisais ce que moi et [Dal] te proposons ?
-
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> -
Salut,
Essaie avec :ls --full-time
"man ls" ... y'a tout ce qu'il faut dedans ;-)) -
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. -
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
-
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...
-
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-
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
-