Getting files for the current date in Linux?
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'_)
Related videos on Youtube
User123
Have worked on Linux based environments, banking and telecom domains. -Linux -shell scripting -Python
Updated on September 18, 2022Comments
-
User123 over 1 year
Usually the
date +%d
gives the output08
for the current date, 08/10/2017. But when I do thels -lrt
on a path, the date format is likeOct 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 over 6 yearsAt 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 over 6 years@steeldriver Ah, but
yesterday
would refer to "this time yesterday" which may cause files modified before midnight to be returned. -
Kusalananda over 6 years@steeldriver
0
works though... -
don_crissti over 6 yearsNote that it will not list files with
mtime
in the future but still today, so after whatevernow
is when you run the command until00:00:00
tommorow. To get those too remove the argumentnow
. -
G-Man Says 'Reinstate Monica' over 2 yearsThe question, while unclear, does not appear to be about files whose name begins with today’s date.