Find and delete files older than n days in Linux

Posted on 30 views

In this guide, we’ll look at how to Delete files older than n days in Linux. The most common use case for this is deleting rotated logs which are older than a certain number of days or removing old backups to clear space for more recent backups.


So let’s consider an example. I’ll search for files under /var/log with an extension of .tar.gz older than 7 days and delete them. I’ll use find command to search for the files.

# find /var/log/ -name *.gz -mtime +7 -exec rm -rf  \;

-mtime option is used to specify last modification of file; i.e  n*24 hours ago. +7 means older than 7 days.

-exec option is used to execute a command in find. The command being executed here is rm -f

The last  \; means loop through the list of items.

If you want to list the files without deleting them, use the command:

# cd /var/log
# find . -type f -mtime +7d -ls

To find and delete files bigger than a specified size and older than n number of days, use -size option: For example:

# find /var/log/ -name *.gz -mtime +7  -size +1G -exec rm -rf  \;

Note that it is possible to save the list of files into a variable before deleting them.

# file_list=`find . -name *.gz -type f -mtime +7`
# for i in $file_list[@]; do
  echo "Deleting $i file"
  rm $i

For more find options, refer to its man page:

# man find

Gravatar Image
A systems engineer with excellent skills in systems administration, cloud computing, systems deployment, virtualization, containers, and a certified ethical hacker.