Print a file's last modified date in Bash

后端 未结 10 2138
难免孤独
难免孤独 2020-11-29 18:01

I can\'t seem to find how to print out the date of a file. I\'m so far able to print out all the files in a directory, but I need to print out the dates with it.

I

相关标签:
10条回答
  • 2020-11-29 18:21

    If file name has no spaces:

    ls -l <dir> | awk '{print $6, " ", $7, " ", $8, " ", $9 }'
    

    This prints as the following format:

     Dec   21   20:03   a1.out
     Dec   21   20:04   a.cpp
    

    If file names have space (you can use the following command for file names with no spaces too, just it looks complicated/ugly than the former):

     ls -l <dir> | awk '{printf ("%s %s %s ",  $6,  $7, $8); for (i=9;   i<=NF; i++){ printf ("%s ", $i)}; printf ("\n")}'
    
    0 讨论(0)
  • 2020-11-29 18:30

    You can use:

    ls -lrt filename |awk '{print "%02d",$7}'
    

    This will display the date in 2 digits.

    If between 1 to 9 it adds "0" prefix to it and converts to 01 - 09.

    Hope this meets the expectation.

    0 讨论(0)
  • 2020-11-29 18:35

    On OS X, I like my date to be in the format of YYYY-MM-DD HH:MM in the output for the file.

    So to specify a file I would use:

    stat -f "%Sm" -t "%Y-%m-%d %H:%M" [filename]
    

    If I want to run it on a range of files, I can do something like this:

    #!/usr/bin/env bash
    for i in /var/log/*.out; do
      stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i"
    done
    

    This example will print out the last time I ran the sudo periodic daily weekly monthly command as it references the log files.


    To add the filenames under each date, I would run the following instead:

    #!/usr/bin/env bash
    for i in /var/log/*.out; do
      stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i"
      echo "$i"
    done
    

    The output would was the following:

    2016-40-01 16:40
    /var/log/daily.out
    2016-40-01 16:40
    /var/log/monthly.out
    2016-40-01 16:40
    /var/log/weekly.out
    

    Unfortunately I'm not sure how to prevent the line break and keep the file name appended to the end of the date without adding more lines to the script.


    PS - I use #!/usr/bin/env bash as I'm a Python user by day, and have different versions of bash installed on my system instead of #!/bin/bash

    0 讨论(0)
  • 2020-11-29 18:37

    For the line breaks i edited your code to get something with no line breaks.

    #!/bin/bash
    for i in /Users/anthonykiggundu/Sites/rku-it/*; do
       t=$(stat -f "%Sm"  -t "%Y-%m-%d %H:%M" "$i")
       echo $t : "${i##*/}"  # t only contains date last modified, then only filename 'grokked'- else $i alone is abs. path           
    done
    
    0 讨论(0)
提交回复
热议问题