Linux - Commande donnant la date d'un fichier

[Fermé]
Signaler
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
-
 erhge -
Bonjour.

Je cherche une commande Linux qui me donnerait la date d'un fichier.

"ls -l" ne me convient pas vraiment. Trop de traitement à coté. Existe-t-il une autre commande ?

En fait je voudrais recuperer cette date et la mettre dans une variable.

Bahan

Close the world.||.txen eht nepO

15 réponses

Messages postés
2
Date d'inscription
mardi 29 août 2006
Statut
Membre
Dernière intervention
12 mars 2014
20
date -r $fichier
27
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Hou le vieux thread... mais pour faire profiter d'autres personnes on peut optimiser la solution de l4nkou en utilisant les options de date pour avoir exactement le format souhaité sans passer par awk :

$ touch toto
$ date -r toto '+%d/%m/%Y %H:%M:%S'
23/12/2010 00:34:34

(cf. man date pour les significations %d%m etc...)
Messages postés
13087
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
11 septembre 2021
418
Salut,

C'est vrai qu'avec un ls, y'a du traitement... mais c'est pas si compliqué :)
Ceci dit, la commande la plus appropriée pour obtenir ce genre de renseignement est la commande stat!
stat -c %x
stat -c %y
stat -c %z
Cf: stat --help|more pour les options possibles et leur signification :)

@++
...Mana mana
   Tutudutu...
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
959
Ben oui,
j'étais en pleine rédaction.
Salut à toi asevere.

Johan
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
Messages postés
13087
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
11 septembre 2021
418 >
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017

Saluche :)
Je connais, je me fais avoir souvent aussi ;)

...Mana mana
Tutudutu...
dsalut Bahan

tu fais un cut sur le resultat de la commande ls -l

droops
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
61
Merci les gars mais le pb c que "ls" donne une date sous ce format : "sep 15 13:06"

Or je prefererais avoir une date sous le format jj/mm/aaaa h:m ou l'inverse.

Est-ce possible facilement ?

Sinon je fais ça, mais j'aurais aimé savoir si on pouvait avoir une date au format classique par une seule commande voire 2 ^_^

Bahan

Close the world.||.txen eht nepO
Salut à vous,

Bien aimé votre discussion.
ça m'a permis de revoir le sed, awk et shell !!

j'y suis presque arrivé :

# stat -c %x mon_fichier | awk -F: '{print $1}'

me donne :

2004-09-15 19


pas mal non ????
mais pas encore parfait !!!!


Merci encore à vous.


Hafed
Bonjour,

Un chaînage de commandes devrait faire l'affaire :

ls -al nomdufichier | awk '{ print $6 $7 " " $8 }'

man awk
http://tille.soti.org/training/bash/ch06s02.html

Dal
ll | awk '{print $7" "$6" "$8}'
1 Dec 2001
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
61
Francois j'ai pas compris ton post ^_^
ll ne me dit vraiment rien comme commande.

Bon je m'en vais essayer le stat...

Bah ca m'a pas l'air mal. Faut juste que j'arrive a choper la date maintenant ^_^.

Et hop voila la ligne de commande : stat -c %y monFichier.
Puis je m'amuse avec les separateurs "-" et ":" et "."

Donc merci encore les ccmers!

Bahan

Close the world.||.txen eht nepO
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
959
Rapidos,
sur une Debian Sarge
stat
exemple
johand@horus:~$ stat -c '%z' bidon
2004-09-11 05:04:21.000000000 +0200
Regarde les options : man stat

(voir l'appel système 'man 2 stat')

Sous Debian , on fait travailler les neurones et les doigts(enfin , le clavier. Ceci n'exclut pas les personnes handicapées de la vue ou d'autres ...
<troll>
Sympa, non
Il est un fait qu'on ne voit jamais d'utilisateur Debian sur CCM.
</troll>

johand@horus:~$ dpkg -S $(which stat)
coreutils: /usr/bin/stat
Donc, fourni d'office (coreutils,: ou alors l'utilisateur Debian est virtuel)

Pour rappel $(command params)
est une version bash lisible de 'backquote command params backquote '(je ne le le retrouve pas sur mon clavier ;)
(voir man dpkg)

Ici, on voit le plaisir d'utiliser Debian.
Je ne sais pas si cette commande utilisateur est fournie sur d'autres distributions.


Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
Messages postés
13087
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
11 septembre 2021
418
<troll killer>
Je dirai simplement le plaisir d'utiliser linux.
rpm -qf $(which stat)
Sur n'importe quelle distribution qui utilise les rpm.
</troll killer> :o)

Pour revenir à nos moutons:
vous allez sans doute trouver que j'ai un esprit tordu, mais j'aime tellement la ligne de commande que j'ai pas pu m'empecher de combinner les commandes pour avoir quelque chose de satisfaisant.

Donc l'idée aprés:
stat fichier -c %x
c'était de balancer ça à la commande date pour pouvoir le manipuler comme on veut :)

Dans la commande date, on peut envoyer une date a afficher avec l'option --date=CHAINE.
donc
date --date="$(stat test -c %x)"
bonche, un probleme de format de date, si on teste, on voit que ce sont les milliseconde qui posent probleme :-/ suffit de les supprimer :)
stat fichier -c %x| sed  "s/\.[0-9]\{9\}//"
(supression de tout ce qui est de la forme .nnnnnnnnn un point suivi de neuf chiffres de 0 à 9)

Voilà, on peut envoyer ça a date:
date --date="$(stat test -c %x| sed "s/\.[0-9]\{9\}//")"
Aprés quoi, les options de format de date permettent de l'afficher comme bon nous semble :)

@++
...Mana mana
Tutudutu...
/tmp/>ls -l test.FP.log | awk '{print $7" "$6" "$8}'
12 Jan 1999


rien de plus simple pour extraire la date...
C'est un peu plus compliqué si tu veux un format déterminé en sortie.

En effet, si ton fichier est récent tu n'auras pas l'année mais l'heure à la place.

Comme indiqué par asevere, la commande date permet de convertir n'importe quel format de représentation de date dans le format de ton choix (un peu comme strftime en C) et peut traiter la sortir de la commande awk.

Cependant la première solution qu'il a indiquée (stat) est plus directe que awk, à condition de disposer de la commande stat (ou de l'installer) et me semble préférable.

Dal
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
959
Rappelons nous la devise des unices
KISS
Keep It Simple, Stupid

http://www.faqs.org/docs/artu/ch01s07.html
http://www.faqs.org/docs/artu/ch01s08.html
Have all fun .
Johan
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
justement si le fichier à moins de 24h il est forcement de l'année courrante !

il suffit de rajouter un if dans la commande AWK ! pour que l'affichage soit bon et il est de plus reformatable dans le awk....
Messages postés
13087
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
11 septembre 2021
418
HA ben oui, mais alors là, ma comande qui parraissait un peu barbar:
date --date="$(stat test -c %x| sed "s/\.[0-9]\{9\}//")"

Devient hachtement plus simple d'un coup ;-)
...Mana mana
   Tutudutu...
tu peut faire la commande ls -t ce qui vous permet d'afficher un fichier avec date
Pour ma culture, je suis preneur de ton exemple de syntaxe awk incorporant un test conditionnel du type que tu mentionnes (proposes tu de faire un contrôle sur l'existence de ":" par exemple ?).

Awk est un outil impressionant que j'aimerai mieux maîtriser.

Dal
Messages postés
13087
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
11 septembre 2021
418 >
Messages postés
5627
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2021

Quand à l'appel de stat, j'imagine bien que ls n'appel pas /bin/stat ceci dit, quand tu compares la structure de stat en C, et la sorti de stat... y'a ed quoi se poser des questions ;-)

Relis bien, on dit exactement la même chose.
La fonctione stat du C est sans doute utilisée dans ls ET dans stat.

...Mana mana
   Tutudutu...
Messages postés
5627
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2021
949 >
Messages postés
13087
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
11 septembre 2021

J'ai relu. Et je suis toujours perplexe en la lisant, car elle semble comporter une affirmation et une remise en question de cette affirmation (après "ceci dit").

Enfin, le principal, c'est qu'on soit d'accord :P


Dal
Messages postés
13087
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
11 septembre 2021
418 >
Messages postés
13087
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
11 septembre 2021

Certe.

J'entendais par là qu'il était quasi certain que la comamnde stat soit un appel brut à la fonction stat et que cette même fonction était appelée dans ls, ça j'en ai eu la certitude hier en regardant les source de ces deux programmes.
Il apparait que la commande stat est (a quelque amelirations prés.) une simple interface permettant d'utiliser la fonction stat du C sans avoir a compiler un prog.

...Mana mana
   Tutudutu...
Messages postés
13087
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
11 septembre 2021
418
Et pour ceux qui se poseraient la question:
Oui je m'ennuis ;-)

...Mana mana
   Tutudutu...
taVariable=$(date -r "$tonFichier" '+%F %T')

Les exemples avec sed, awk etc... bien que ces outils soient puissants et incontournables sont ici useless...
Pourquoi rajouter des pipes ?
Un posteur a justement rappelé : KISS
Bonjour à tous !

Je suis sur un projet linux en ce moment, et vous m'avez bien aidé ! Merci ! Alors je vous passe mon petit correctif de la commande d'Hafed :

# stat -c %y filename|awk -F: '{print $1":"$2":"$3}'|cut -c1-19

me donne :

2004-11-17 15:02:50


Voilà ! salutations