|
|
|
| info statistiques sur un fichier Unix par karlus79 |
jeudi 16 février 2006 à 00:19:26 |
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 Gates gave you the windows. GNU gave us the whole house.(Alexandrin) |
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 |
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 ;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
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
|
| 11/03 21h55 | tout les fichiers uninstall.exe supprimés | Logiciels/Pilotes | 11/03 22h21 | 9 |
| 20/01 20h25 | info sur fichier avec extension cbr | Windows | 20/01 21h13 | 4 |
| 29/12 14h57 | Problème fichier unicows.dll | Windows | 29/12 16h33 | 4 |
| 01/07 08h54 | Pb systeme fichier unix sco | Linux/Unix | 01/07 15h44 | 4 |