find: Remove files modified more than 31 days ago

This is one of those things that you will run into eventually and once you know how, it is extremely useful.


# find ./ -type f -mtime +31 -exec rm {} ;

This will find all of the files older than 31 days, If you want to do files and directories you will need two commands.

# find ./ -not -type d -mtime +31 -exec rm {} ;  
# find ./ -type d -mtime +31 -exec rmdir {} ;

The only reason you run the commands twice is because when find runs rm on a non empty directory it will error. This is safer than using an rm -Rf just in case find wants to delete a directory with newer files in it.


I just found the below syntax while writing this, in Unix/Linux there are many ways to skin a cat.


 [[email protected] tmp]# find ./ -mtime +31  
 [[email protected] tmp]# find ./ -mtime +31 -delete  
 [[email protected] tmp]# find ./ -mtime +31
Benjamin Cane
Principal Engineer, Vice President

Benjamin Cane is Principal Engineer at American Express. He has more than 16 years of experience with roles in both systems and software engineering. He leverages both his systems and software skills to build end-to-end platforms. Platforms, purpose built for performance and resiliency. Benjamin is also the author of Red Hat Enterprise Linux - Troubleshooting Guide (2015, Packt Publishing), and he has published many popular articles on topics such as Linux, Docker, Python, Go and Performance Tuning. Thoughts and Opinions expressed in my articles are my own.