gvien a basedir, find most recently modified files
many a times we want to find out most recently modified files on system within a directory - it may be codebase, or configuration files, where we might have been changing things in order to make it work - but in the end when it finally would begin to work, we may have lost track of which files had we touched.
- -noTime: default behaviour shows time beside filenames; this stops that: easier to work with find/xargs pipelines.
- -0: expect filenames to be
\0
-separated on stdin, and print them separated by\0
on stdout; implies -noTime. For working withfind -print0
andxargs -0
.
There are already ways to query most recently modified files, One is (we'll call it existingCmds1):
$ find ~/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort | tail -20
(where 20 is the number of most recently modified files one would like to get).
existingCmds1 works, if one's "find" supports -printf option (find found on many of the systems do not). Plus existingCmds1 takes lot more time than needed.
Another way to achieve it is (let us call it existingCmds2):
$ find ~/xtg-main/ -type f|grep -v " "|xargs ls -lrt | tail -20
but xargs starts splitting the arguments if they are too long - so existingCmds2 does not achieve the objective.
$ gcc -Wall -Wextra -o recentmost recentmost.c $ find ~/ -type f|./recentmost 20
To build, go to Visual Studio Cmd Prompt,
$ cl.exe recentmost.c
To run, Go to the dir where recently modified files are to be looked for,
$ dir /b/s/A-D | /path/to/recentmost.exe 20
On my system (linux), existingCmds1 is taking ~9 secs on a dataset, and recentmost for the same dataset, takes just ~1 sec.