Develop cleanup script
At a high level our script must do the following:
Navigate to our Downloads directory or another directory of choice
import os
import glob
import time
import sys
import datetime
import logging
path = '/path/to/Downloads/'
os.chdir(path)
Search for files that meet our criteria
for filename in glob.glob('*'):
filename = os.path.join(path, filename)
mod_date = datetime.date.fromtimestamp(os.stat(filename).st_mtime)
Delete all files that have been modified more than 7 days ago
if mod_date < (datetime.date.today() - datetime.timedelta(days=7)):
try:
if os.path.isfile(filename):
os.remove(filename)
except:
pass
In the first step we are navigating to the directory we want to cleanup using its absolute path. Then we use the glob module to filter files according to our needs. In this case, we are getting everything except for hidden files. On a mac, this ensures that our .DS_store and .localized files are not removed. The glob module returns the filenames with their relative path. Therefore, we append the directory path to ensure we don’t have any issues deleting the files. We retrieve the modification date for each file and if the date is more than 7 days prior to the current date we delete the file.
A working copy of the cleanup script along with instructions can be found in our GitHub repo.
Schedule cleanup process
Now that we have a working script that removes files from our Downloads directory. Let’s schedule it to run every Sunday at 3:30AM. Using a mac we need to create a plist file. You can find an example plist file in our GitHub repo. In this file, you can edit the frequency for which you would like this script to run. After edits are made, you can place the file in your ~/Library/LaunchAgents directory. In order to finalize the scheduling process you must execute the following command:
launchctl start nameOfPlistFile
Conclusion
We have successfully developed and scheduled a cleanup script to remove files from a specific directory on our system. In this scenario, we have chosen to cleanup our downloads directory. However, this same script can be used for any directory. If you have questions or know of an easier way to implement this solution, please contact us.