346

E.g., a MySQL server is running on my Ubuntu machine. Some data has been changed during the last 24 hours.

What (Linux) scripts can find the files that have been changed during the last 24 hours?

Please list the file names, file sizes, and modified time.

Benjamin W.
  • 46,058
  • 19
  • 106
  • 116
JackWM
  • 10,085
  • 22
  • 65
  • 92
  • 1
    You could use http://stackoverflow.com/questions/4561895/how-to-recursively-find-the-latest-modified-file-in-a-directory – vaugham Apr 18 '13 at 14:40

7 Answers7

611

To find all files modified in the last 24 hours (last full day) in a particular specific directory and its sub-directories:

find /directory_path -mtime -1 -ls

Should be to your liking

The - before 1 is important - it means anything changed one day or less ago. A + before 1 would instead mean anything changed at least one day ago, while having nothing before the 1 would have meant it was changed exacted one day ago, no more, no less.

ArtOfWarfare
  • 20,617
  • 19
  • 137
  • 193
Xavjer
  • 8,838
  • 2
  • 22
  • 42
69

Another, more humanist way, is to use -newermt option which understands human-readable time units (see man find and search for -newerXY).

Unlike -mtime option which requires the user to read find documentation to figure our what time units -mtime expects and then having the user to convert its time units into those, which is error-prone and plain user-unfriendly. -mtime was barely acceptable in 1980s, but in the 21st century -mtime has the convenience and safety of stone age tools.

Example uses of -newermt option with the same duration expressed in different human-friendly units:

find /<directory> -newermt "-24 hours" -ls
find /<directory> -newermt "1 day ago" -ls
find /<directory> -newermt "yesterday" -ls
SebMa
  • 4,037
  • 29
  • 39
Maxim Egorushkin
  • 131,725
  • 17
  • 180
  • 271
51

You can do that with

find . -mtime 0

From man find:

[The] time since each file was last modified is divided by 24 hours and any remainder is discarded. That means that to match -mtime 0, a file will have to have a modification in the past which is less than 24 hours ago.

Michael
  • 57,169
  • 9
  • 80
  • 125
14

On GNU-compatible systems (i.e. Linux):

find . -mtime 0 -printf '%T+\t%s\t%p\n' 2>/dev/null | sort -r | more

This will list files and directories that have been modified in the last 24 hours (-mtime 0). It will list them with the last modified time in a format that is both sortable and human-readable (%T+), followed by the file size (%s), followed by the full filename (%p), each separated by tabs (\t).

2>/dev/null throws away any stderr output, so that error messages don't muddy the waters; sort -r sorts the results by most recently modified first; and | more lists one page of results at a time.

Stephen G Tuggy
  • 991
  • 10
  • 16
9

For others who land here in the future (including myself), add a -name option to find specific file types, for instance: find /var -name "*.php" -mtime -1 -ls

jytou
  • 510
  • 4
  • 7
resedasue
  • 434
  • 5
  • 14
5

This command worked for me

find . -mtime -1 -print
BhandariS
  • 606
  • 8
  • 20
0

Find the files...

You can set type f = file

find /directory_path -type f -mtime -1 -exec ls -lh {} \;

Deividson Damasio
  • 431
  • 1
  • 6
  • 15