Deleting files and folders manually is not an exciting task, as one may think. It makes sense to automate them. Here comes Python to make our lives easier. Python is an excellent programming language for scripting. We are going to take advantage of Python to finish our task without any obstacle. First, you should know why Python is a good choice.
Python is an all-time favorite language for automating tasks Less code compared to other programming languages Python is compatible with all the operating systems. You can run the same code in Windows, Linux, and Mac. Python has a module called os that helps us to interact with the operating system. We are going to use this module to complete our automation of deleting the files.
We can replace any annoying or repetitive system tasks using Python. Writing scripts for completing a specific system task is a cupcake if you know Python. Let’s look at the following use case. Note: the following are tested on Python 3.6+
Removing files/folders older than X days
Often you don’t need old logs, and you regularly need to clean them to make storage available. It could be anything and not just logs. We have a method called stat in the os module that gives details of last access (st_atime), modification (st_mtime), and metadata modification (st_ctime) time. All the methods return time in seconds since the epoch. You can find more details about the epoch here. We will use a method called os.walk(path) for traversing through the subfolders of a folder. Follow the below steps to write code for the deletion files/folders based on the number of days.
Import the modules time, os, shutil Set the path and days to the variables Convert the number of days into seconds using time.time() method Check whether the path exists or not using the os.path.exists(path) module If the path exists, then get the list of files and folders present in the path, including subfolders. Use the method os.walk(path), and it will return a generator containing folders, files, and subfolders Get the path of the file or folder by joining both the current path and file/folder name using the method os.path.join() Get the ctime from the os.stat(path) method using the attribute st_ctime Compare the ctime with the time we have calculated previously If the result is greater than the desired days of the user, then check whether it is a file or folder. If it is a file, use the os.remove(path) else use the shutil.rmtree() method If the path doesn’t exist, print not found message
Let’s see the code in detail. You need to adjust the following two variables in the above code based on the requirement.
Removing files larger than X GB
Let’s search for the files that are larger than a particular size and delete them. It is similar to the above script. In the previous script, we have taken age as a parameter, and now we will take size as a parameter for the deletion. Adjust the following two variables.
Removing files with a specific extension
There might be a scenario where you want to delete files by their extension types. Let’s say .log file. We can find the extension of a file using the os.path.splitext(path) method. It returns a tuple containing the path and the extension of the file. Don’t forget to update the path and extension variable in the above code to meet your requirements. I would suggest testing the scripts in the NON PRODUCTION environment. Once you are satisfied with the results, you can schedule through cron (if using Linux) to run it periodically for maintenance work. Python is great to achieve this stuff and if interested in learning to do more then check out this Udemy course.