[Shell] Récupérer date d'un fichier

Résolu
Bonjour,
j'ai une petite question sur les dates fichiers en ksh.
Je voudrais juste pouvoir récupérer la date d'un fichier précis avec un format du genre jj/mm/aaaa(format non fixé).
Avec la commande ls je liste tout les fichiers présent et j'ai leur date mais séparément.

Merci d'avance
^^
Configuration: Windows XP
Firefox 2.0.0.14

14 réponses

Résumé de la discussion

La discussion porte sur l’extraction de la date d’un fichier dans un shell ksh en utilisant un format jj/mm/aaaa, à partir d’un affichage ls qui liste mais ne formatte pas la date. Plusieurs approches ont été évoquées, notamment date -r fichier, ou des méthodes utilisant ls --full-time, sed ou awk pour reformater, et l’usage de stat sur certaines plateformes. Des différences entre systèmes (Linux, HP-UX, BSD) et les options ls non universelles exigent de parser avec awk/sed ou de recourir à date, et de vérifier la disponibilité des options.

Bobot (l’IA à votre service)
  1. essaye ca :

    date -r [nomFichier]
    1
    1. Voilà ce que ça me donne :

      /home/fichiers #date -r valide.sql
      date: illegal option -- r
      Usage: date [-u] [+format]
             date [-u] [mmddhhmm[[cc]yy]]
             date [-a [-]sss.fff]
      
      /home/fichiers #date valide.sql
      date: bad conversion
      
      /home/fichiers #date -u mmddhhmm valide.sql
      date: bad conversion
      
      /home/fichiers #date -a valide.sql
      Usage: date [-u] [+format]
             date [-u] [mmddhhmm[[cc]yy]]
             date [-a [-]sss.fff]
      
      /home/fichiers #date -a -valide.sql
      Usage: date [-u] [+format]
             date [-u] [mmddhhmm[[cc]yy]]
             date [-a [-]sss.fff]
      
      


      Je ne voie pas comment faire.
      Je vais regarder de plus près le man date.

      Merci comme même, si tu pense à autre chose je suis toujours preneur.

      ^^

      PS : je rappel que je suis en ksh
      0
    2. Contributeur
      @JOBiJOBa2Etrange, le date -r fonctionne chez moi sur ksh...
      0
  2. Modérateur
    Voir aussi ce vieux thread ;-))
    1
    1. Merci pour ce lien, ça ma beaucoup servi.

      Ma solution :
      ll test.sh | awk '{print $7" "$6" "$8}'

      ou
      ll test.sh | awk '{print $7"/"$6"/"$8}'

      ou
      ll test.sh | awk '{print $7"-"$6"-"$8}'


      Résultat :

      2 Feb 2007
      ou
      2/Feb/2007
      ou
      2-Feb-2007

      C'était tout ce que je demandais, on est peut être parti un peut trop loin.

      Merci beaucoup tout le monde de votre aide.
      ^^
      0
  3. Modérateur
    Salut,

    Qu'as-tu comme système ou comme distrib ?
    0
    1. Je travail avec putty sous windows pour communiquer avec un serveur UNIX.
      Je bosse en ksh.
      Sinon je ne peut pas vous en dire plus.

      ^^
      0
    2. @JOBiJOBa2Personne a une idée?
      0
  4. Modérateur
    Regarde du côté de la commande "stat" peut être :
    stat -c %y fichier
    2008-05-20 09:21:28.000000000 +0200
    ;-))
    0
    1. Voilà le résultat:
      /home/fichiers #stat -c %y test.sh
      ksh: stat:  not found
      


      Tu es sûr que c'est du ksh?

      Merci quand même
      ^^
      0
  5. Modérateur
    Normalement la commande "stat" n'a rien à voir avec le shell utilisé. Que te renvoie la commande :
    whereis stat
    ?
    0
    1. ça :

      stat: /usr/share/man/man2.Z/stat.2 /usr/share/man/man2.Z/stat64.2 /usr/share/man/man5.Z/stat.5


      ^^
      0
  6. Modérateur
    Ouais, elle n'est pas installée ;-((

    Ben il te reste plus qu'à voir avec "ls --full-time" (si toutefois l'option est présente) et un saucissonage de la sortie avec "cut" ou "awk" ;-))
    0
    1. Modérateur
      Que renvoie "uname -a" ?
      0
      1. HP-UX DARK B.11.11 U 9000/800 733927621 unlimited-user license
        
        0
    2. Modérateur
      Salut,

      et comme ça?
      root@debian:~# ls -l --time-style=+'%d/%m/%Y' essai.txt
      -rw-r--r-- 1 aaa users 2 02/10/2007 essai.txt
      root@debian:~# ls -l --time-style=+'%d/%m/%Y' essai.txt | cut -d' ' -f6
      02/10/2007
      0
      1. Voilà ce que cela me donne :

        /home/fichiers/ #ls -l --time-style=+'%d/%m/%Y' test.sh | cut -d' ' -f6
        ls: illegal option -- -
        ls: illegal option -- -
        ls: illegal option -- y
        ls: illegal option -- =
        ls: illegal option -- +
        ls: illegal option -- %
        ls: illegal option -- /
        ls: illegal option -- %
        ls: illegal option -- /
        ls: illegal option -- %
        ls: illegal option -- Y
        usage: ls -1ARadeCxmnlogrtucpFLbqisf [files]
        
        0
    3. Modérateur
      Salut,

      sinon peut être une solution Perl?!
      0
      1. Modérateur
        PERL , mouais, l'art de traire une puce avec des gants de boxe ;-)
        Ce serait plus efficace de connaître la distribution et d'utiliser des outils légers, ...
        0
        1. Modérateur
          Ce serait plus efficace
          En ce cas je laisse la place à l'efficacité.
          0
          1. Modérateur
            Affiche tout simplemnet
             ls -l test.sh
            --
            106485010510997108
            0
            1. Oui ça c'est d'accord mais moi je veut pouvoir stocker seulement la date. Par exemple 2008/05/20.

              ^^
              0
            2. Modérateur
              @JOBiJOBa2Non, il te demande d'afficher la sortie pour qu'on puisse voir à quoi elle correspond afin d'adapter un traitement en fonction...
              0
            3. @jipicyOkey désolé :

              -rwxrwxrwx   1 jobi       jobi          8607 May 20 11:12 test.sh
              
              0
            4. @JOBiJOBa2Je n'est pas le même format de date que vous!!!!

              ^^
              0
          2. Modérateur
            et ça alors

            # ls -l essai.txt
            -rw-r--r-- 1 aaa users 2 2007-10-02 16:57 essai.txt
            # ls -l essai.txt| sed 's/.*\([0-9][0-9][0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]\).*/\1\/\2\/\3/'
            2007/10/02

            Edit : Vu ta sortie oublie ce message ;-)
            0
            1. Modérateur
              Ta solution ne marche pas sur ton exemple

              # echo "-rwxrwxrwx   1 jobi       jobi          8607 May 20 11:12 test.sh" | awk '{print $7" "$6" "$8}'
              20 May 11:12


              La prochaine fois vaut mieux afficher ce que tu veux traiter, ça nous fera gagner de temps et pour toi aussi.

              Si t'aurais affiché depuis le début .....
              0