Introduction :
In Production server, there is always a need to free up the disk space from time to time. The best way to achieve is to have a cron job or an autosys job which will delete the older log files from the directory.
In this simple tutorial, we’ll quickly look at the solution to this problem. In order to delete files older than X number of days, try using Unix find command. find command is more powerful than you can really imagine. It comes up with multiple options which when gets handy can help you cover a lot of functional requirements like moving files among directories, deleting old files, archiving files etc.
Recently I came across one such requirement of deleting files older than X days from a directory in Unix server and I thought of sharing the solution with you.
Solution :
Unix find command is used to achieve the desired result.
find /path/to/the/directory/ -type f -name '*' -mtime +30 -exec rm {} \;
Explanation :
Time to breakdown the find command mentioned above :
- /path/to/the/directory : Edit this portion of the code with the path of your target directory.
- -type f : It signifies that we are targeting all the ‘files’ in the specified directory.
- -name ‘*’ : We have used a general regex “*” to match all the file names. You can make it more specific if you need. For example , to delete only dat files use :
-name "*.dat"
.
- -mtime +30 : This refers to all the files which are older than 30 days. mtime stands for Modification time in Unix.You can change the number based on your requirement.
- –exec rm {} \ : This is actually the execution command which calls for deletion of all the files filtered by all the above criteria.
rm
stands to remove in Unix.
Although it is a very simple command, still I want you understand the usage of mtime in find command in a little more detail.
The POSIX specification for find command states that :
-mtime n
The primary shall evaluate as true if the file modification time subtracted from the initialization time, divided by 86400 (with any remainder discarded), is n
.
In the descriptions, wherever n
is used as a primary argument, it shall be interpreted as a decimal integer optionally preceded by a plus ( ‘+’ ) or minus-sign ( ‘-‘ ) sign, as follows: +n
More than n
. n
Exactly n
. -n
Less than n
.
Important point to note in the above statement is that the fractional part is always ignored. So, when you specify -mtime +1
, it looks for files older more than 1 day. Rather to explain it further, it simply says to match files modified two or more days ago.
If you want to delete files older than 1 day, you can try using -mtime +0
or -mtime 1
or -mmin $((60*24))
.
Would suggest you to try playing with the combinations on your own to deepen the understanding.
Still in case you have more questions, please feel free to get in touch with me.