Find shell command
From Notes_Wiki
Home > Shell scripting > find shell command
Find files older than given no. of days
To find files older than 30 days use:
find . -mtime +30 -daystart
Careful To automatically delete files older than 30 days use:
find . -mtime +30 -daystart -delete
To find files modified within last 5-6 days use:
find . -mtime +5 -mtime -6
There is also atime and ctime for access times and change times respectively. mtime used in above examples is for modification times.
Find files between two given dates
To find files between two given dates or timestamps use commands similar to:
find -newerct "1 Aug 2013" ! -newerct "1 Sep 2013" -ls find -newermt "2017-11-06 17:30:00" ! -newermt "2017-11-06 22:00:00" -ls
Refer: https://stackoverflow.com/questions/18339307/find-files-in-created-between-a-date-range
To find files between given dates and grep for a string and print file names having that string use:
find . -newermt "1 Oct 2016" ! -newermt "31 Oct 2016" -type f -print0 | xargs -0 grep -l impstring > imp-files.txt 2>&1 &
Here:
- m in newermt stands for modification time. There are other options such as -newerct for creation time or -newerat for access times, etc.
- -print0 in find prints search results terminated by null. This is great if you want to deal with spaces, special characters, etc.
- xargs -0 takes inputs given by find -print0 appropriately. No need to worry about escaping the special characters eg spaces for grep. xargs will take care of that