Posez votre question Signaler

[Shell UNIX] Date de modif d'un fichier

jebok 371Messages postés 16 mai 2005Date d'inscription - Dernière réponse le 7 juin 2010 à 17:02
Bonjour,

Y a-t-il une commande (ksh) qui permette de récupérer la date de dernière modification d'un fichier (à part ls -lrt) ?

Merci
Lire la suite 

[Shell UNIX] Date de modif d'un fichier »

22 réponses
Réponse
+6
moins plus
Avez-vous essayé :

date -r [fichier] '+%s' ?
Ajouter un commentaire
Réponse
+2
moins plus
Il existe des outils relatifs aux propriétés des fichiers bien plus intéressants que ls.
Le fait que l'on utilise ksh n'a d'ailleurs rien avoir avec la choucroute, ls est en général une commande externe.
C'est plutot la qualité de la distribution qui est en jeu ici.
Par exemple stat
(sous Debian
johand@horus:~$ dpkg -S $(which stat)
coreutils: /usr/bin/stat)

johand@horus:~$ stat -c "last access: %x last modification:%y" mbox
last access: 2005-08-04 09:18:25.000000000 +0200 last modification:2005-06-23 10:23:42.000000000 +0200

Lire man stat évidemment.

Johan
Régis - 23 oct. 2006 à 13:54
Tu peux essayer avec une commande de ce genre. C'est ce que je fais depuis un AIX sur 2 linux différents qui me renvoyent des formattages différents de date

ls -al /pse/versions_etats | sed 's/ * / /g' | cut -d ' ' -f 6-8
zzubjisisv - 30 mars 2007 à 11:19
Salut a tous

j'aimerais savoir s'il est possible de récupérer une date au format "secondes depuis1970", et pas jour mois année

Merci!
jipicy - 30 mars 2007 à 11:33
Salut,

man date !
date '+%s'
;-)
Ajouter un commentaire
Réponse
+2
moins plus
Sous AIX, la seule astuce que l'on m'a donnée c'est de passer par la commande "tar". Je l'ai complétée en utilisant la commande "time".

Ci joint une fonction t'affichant l'horodatage complet d'un fichier :

function timestamp
{
#DGX&GRE-20050823
#set -x # Pour passer en mode trace

File=$1

if [ ! -f "${File}" -a ! -d "${File}" ]
then
echo "usage : ${0} filename" >&2
return 1
else
touch -r "${File}" /tmp/T.timestamp.$$
LANG=fr_FR # Pour passer en format francais
# LANG=en_EN # Pour passer en format anglais
tar -cf - /tmp/T.timestamp.$$ | tar -tvf - | awk '{print $5" "$6" "$8" "$7}'
rm -f /tmp/T.timestamp.$$
fi
unset File
return 0
}
Ajouter un commentaire
Réponse
+1
moins plus
man stat alors ;-))

       %X     Time of last access as seconds since Epoch

       %x     Time of last access

       %Y     Time of last modification as seconds since Epoch

       %y     Time of last modification

       %Z     Time of last change as seconds since Epoch

       %z     Time of last change
En gros :
stat -c '%X' fichier
;-))
Ajouter un commentaire
Réponse
+1
moins plus
Sur le système AIX, c'est la commande istat.
Ex. >istat nom_fichier (ou nom_répertoire)
Ajouter un commentaire
Réponse
+0
moins plus
Ben c'est bien ls -l qu'est ce qu'il te faut de plus ? En fait c'est pour faire quoi ?
jebok - 5 août 2005 à 09:28
Oui, ls c'est très bien, mais le problème, c'est que je souhaite connaître la date de modif de plusieurs fichiers situés sur plusieurs machines.
Et c'est là que ca se gâte car en fonction de la machine, la date est en anglais ou en francais donc il m'est impossible de faire un traitement automatique de la date...

C'est pourquoi je recherche une commande "universelle" qui donne un résultat formaté que je pourrais ensuite retraité automatiquement (par un script).
Ajouter un commentaire
Réponse
+0
moins plus
merci jipicy, mais en fait, le man date de Sun 5.8 est vraiment pas complet... (j'ai une page avec rien de bien utile, je cherche mal??)

en fait ce que je voulais, c'était récupérer la date de dernière modification d'un fichier sous format secondes depuis 1970, pour pouvoir l'utiliser avec Java et le format long...

merci encore pour ton (votre) aide!
Ajouter un commentaire
Réponse
+0
moins plus
j'avais déjà essayé stat..

mais :
ksh: stat: not found

j'ai l'impression d'avoir que la base de la base des commandes...
Ajouter un commentaire
Réponse
+0
moins plus
Est ce que tu as perl installé ?
lami20j - 25 mai 2007 à 15:35
Salut,

Perl est native sur les système type UNIX
dubcek - 25 mai 2007 à 15:41
Sur Solaris, pas avant 2.6 ... quant à AIX ...

le script suivant permet de récupérer les dates en secondes:

perl -e '($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($ARGV[0]); printf "atime=%ld, mtime=%ld, ctime=%ld\n", $atime, $mtime, $ctime' file_name

le même simplifié

perl -e '(@i) = stat($ARGV[0]); printf "atime=%ld, mtime=%ld, ctime=%ld\n", $i[8], $i[9], $i[10]' file_name
Mister_Toofer - 14 oct. 2008 à 14:02
Merci, c'est exactement ce que je cherchais !
Il faudrait que j'apprenne le perl, ça a l'air vachement puissant !
Ajouter un commentaire
Réponse
-1
moins plus
encore simplifié
perl -e '($atime,$mtime,$ctime)=(stat($ARGV[0]))[8..10];print "$atime, $mtime, $ctime\n";' file_name
--
lami20j
Ajouter un commentaire
Ce document intitulé « [Shell UNIX] Date de modif d'un fichier » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook