Getting files for the current date in Linux?

17,100

Solution 1

This is cheating a bit, but it works.

First create an empty reference file with a specific timestamp, namely midnight:

touch -d "$(date +%FT00:00:00)" /tmp/midnight

Then find files that are newer than this file:

find . -type f -newer /tmp/midnight

If you want ls-like output from find rather than just the pathnames:

find . -type f -newer /tmp/midnight -ls

If you want to find files matching the pattern XYZ.LOG*:

find . -type f -name 'XYZ.LOG*' -newer /tmp/midnight -ls

If you have GNU find, you may bypass the temporary file and use

find . -type f -newermt 0

to get files modified since midnight.


Related: Why *not* parse `ls`?

Solution 2

You can use stat(1) to get the modified time of a file, but this is not portable.

On Linux:

$ stat -c %y some_file
2017-09-23 10:24:09.880806666 +0200

$ date -d @$(stat -c %Y some_file) +%d-%m-%Y
23-09-2017

On BSD:

$ stat -f %Sm -t %d-%m-%Y some_file
23-09-2017

Solution 3

how to get the files of the current date?

ls command has --time-style option to print the time in specific format:

ls -l --time-style=+'%d-%m-%Y' | awk -v d=$(date +%d-%m-%Y) '$6==d'

--time-style=STYLE
with -l, show times using style STYLE: full-iso, long-iso, iso, locale, or +FORMAT; FORMAT is interpreted like in 'date';

Solution 4

With zsh, using glob qualifiers and age:

autoload age
print -rl ./**/XYZ.LOG*(e_'age today now'_)

or, if you prefer the long listing format:

autoload age
ls -lrtd -- **/XYZ.LOG*(e_'age today now'_)
Share:
17,100

Related videos on Youtube

User123
Author by

User123

Have worked on Linux based environments, banking and telecom domains. -Linux -shell scripting -Python

Updated on September 18, 2022

Comments

  • User123
    User123 over 1 year

    Usually the date +%d gives the output 08 for the current date, 08/10/2017. But when I do the ls -lrt on a path, the date format is like Oct 8 15:03, so, how do I get the files of the current date?

    I'm using the command

    ls -lrt XYZ.LOG* |grep "$(date +'%b %d')" |awk '{print $9}'
    

    but it's not giving me the file of today's date (08/10/2017) although it gives me correct output for the dates 10 - 31st of any month.

  • smw
    smw over 6 years
    At least with recent versions of GNU find, you can skip the temp file and use time strings directly with the -newerXY test e.g. find . -type f -newermt yesterday
  • Kusalananda
    Kusalananda over 6 years
    @steeldriver Ah, but yesterday would refer to "this time yesterday" which may cause files modified before midnight to be returned.
  • Kusalananda
    Kusalananda over 6 years
    @steeldriver 0 works though...
  • don_crissti
    don_crissti over 6 years
    Note that it will not list files with mtime in the future but still today, so after whatever now is when you run the command until 00:00:00 tommorow. To get those too remove the argument now.
  • G-Man Says 'Reinstate Monica'
    G-Man Says 'Reinstate Monica' over 2 years
    The question, while unclear,  does not appear to be about files whose name begins with today’s date.