Date de création d'un fichier depuis un for

sbouli Messages postés 208 Statut Membre -  
sbouli Messages postés 208 Statut Membre -
Bonjour,

comment obtenir l'année de création (pas modification) d'un fichier au sein d'une boucle FOR du type :

for fich in `ls -1 /var/log/*.log* 2>/dev/null`
do

blabla
done

J'ai bien la variable fich qui contient le nom complet du fichier mais où sont les autres informations ???

Merci d'avance.

Stéphane
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Il est impossible de retrouver la date de création d'un fichier sous Unix/Linux ;-((
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      si je peux me permettre, je ne suis pas d'accord.
      ls -lc donne la date de création du fichier, pour autant qu'aucune commande qui modfie l'inode, telle que chmod ou chown n'ait été exécutée.
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Tu peux, tu peux ;-))

        Mais bon, si je regarde la page de man :
               -c     Employer la date de changement de statut des fichiers plutôt que
                      la date de modification, autant pour l'affichage (option -l) que
                      pour le tri (option -t).
        
               -c, --time=ctime, --time=status
                      Trier  le  contenu  des  répertoires  en  fonction  des dates de
                      changement des statuts de fichiers, plutôt qu'en fonction de  la
                      date de modification.  S'il s'agit d'un format long, afficher la
                      date de changement de statut plutôt que la date de  modification
                      du fichier.
        D'après tout ce que j'ai lu, la date de création d'un fichier n'est stockée nulle part. Mais bon j'ai peut être sauté une case... ;-))
        0
      2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        c'est juste, mais à la création du fichier, date de création == date de changement de statut pour autant que ce statut ne change pas par un chgrp, chmod, chown, la date de création perdure.

        man ls sur Solaris
        -c
        Uses time of last modification of the i-node (file created, mode changed, and so forth) for sorting (-t) or printing (-l or -n).
        0
  2. sbouli Messages postés 208 Statut Membre 2
     
    grrr
    j'aurais dû m'en douter ... mon problème est simple, sous postfix, dans les logs, l'année n'est pas écrite, conclusion si je me base sur les lignes de log pour savoir si j'ai traité le fichier ou pas ... je suis grillé en cas de début d'année ...
    et je peux pas me baser sur les noms de fichiers à cause des rotations ....

    .... je ne vois pas de solution ....

    stéphane
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    L'année n'est pas écrite dans les logs, mais le fichier de log lui (le dernier en cours ou les archives (gz)) a une date "ls -l" (c'est un ELLE minuscule et non pas un UN)...
    0
  4. sbouli Messages postés 208 Statut Membre 2
     
    Hello,

    En fait, les logs subissent une rotation sur 60 jours via logrotate, il semble que la date subit alors une modif (la date de création explose, et l'autre prend 2 jours de décalage).
    Bon quoi qu'il en soit, je ne suis intéressé que par les logs de moins d'un an donc soit, l'année est l'année en cours soit l'année d'avant si le mois en cours est < au mois du log

    Je me base donc pas sur la date du fichier.

    Cependant pour mon petit cerveau, je voudrais savoir comment avoir la date du fichier dans la boucle :

    for fich in `ls -1 /var/log/*.log* 2>/dev/null`
    do
    echo "le fichier en cours est ${fich} dont la date est ${....}
    done

    Merci d'avance !
    0