Skip to content

Commit 0e81747

Browse files
committed
Added python script for dektop cleanup & readme
1 parent 4c7646b commit 0e81747

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

desktop_cleanup/README.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Script to automatically deletes/ lists all files recursively in desktop which havent been modified
2+
3+
Script expect the user to pass limit in days beyond which the file if not modified would be listed/ deleted
4+
depending on the arguments provided to the scipts
5+
6+
## install requirements/dependencies:
7+
8+
No external requirements/dependencies to be installed
9+
10+
## how to use:
11+
12+
call the program using:
13+
`python main.py --limit <limit in days> --delete <1 or 0>`
14+
--limit -> argument to specify the limit in days beyond which if modifications were not done, the file would be listed
15+
--delete -> optional argument to specify whether to delete the files or not, takes values of 0 or 1, 0 to not delete, 1
16+
to delete

desktop_cleanup/main.py

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import os
2+
import argparse
3+
import sys
4+
import datetime
5+
import logging
6+
7+
8+
class DesktopCleaner:
9+
10+
def __init__(self):
11+
self._args = self.cli_parse()
12+
self._desktop_path = self.get_desktop_path()
13+
self.logger = logging.getLogger(__name__)
14+
logging.basicConfig(filename='Log.log', filemode='w', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
15+
self._files_paths = []
16+
17+
@staticmethod
18+
def cli_parse():
19+
arg_parser = argparse.ArgumentParser(prog='Desktop cleanup', description='Automation script to \
20+
clean up old desktop files')
21+
arg_parser.add_argument("--delete", type=int, required=False, help='Flag to delete the files')
22+
arg_parser.add_argument("--limit", type=int, required=True, help='No of days to check for')
23+
return arg_parser.parse_args()
24+
25+
@staticmethod
26+
def get_desktop_path():
27+
_username_path = os.path.expanduser('~')
28+
29+
if sys.platform == 'win32':
30+
_username_path += '\\Desktop'
31+
else:
32+
_username_path += '/Desktop/New folder'
33+
34+
return _username_path
35+
36+
def delete_files(self):
37+
self.logger.info(f"Deleting all the files \n")
38+
for file_path in self._files_paths:
39+
try:
40+
os.remove(file_path)
41+
self.logger.info(f"Deleted file {file_path} successfully\n")
42+
except FileNotFoundError:
43+
self.logger.error(f"{file_path} not found\n")
44+
except PermissionError:
45+
self.logger.error(f"User does not have permission to delete {file_path}\n")
46+
except Exception as e:
47+
self.logger.error(f"Error occurred - {e} for {file_path}\n")
48+
49+
def scan_desktop(self):
50+
51+
52+
for dirpath,_,files in os.walk(self._desktop_path):
53+
self.logger.info("Walking through all files in desktop\n")
54+
for file in files:
55+
file_path = str(os.path.join(dirpath, file))
56+
file_details = os.stat(file_path)
57+
58+
last_modified = datetime.datetime.fromtimestamp(file_details.st_mtime)
59+
curr_time = datetime.datetime.now()
60+
61+
delta_days = curr_time - last_modified
62+
limit = self._args.limit
63+
64+
if delta_days.days > limit:
65+
self.logger.info(f"{file_path} is exceeding threshold - last modified {delta_days.days} ago\n")
66+
self._files_paths.append(file_path)
67+
68+
if self._args.delete and len(self._files_paths)>0:
69+
self.delete_files()
70+
elif len(self._files_paths) > 0:
71+
self.logger.info(f"Delete option not selected - so only logging file names\n")
72+
else:
73+
self.logger.info(f"No files exceeding the limit\n")
74+
75+
if __name__=='__main__':
76+
77+
desktop_cleaner = DesktopCleaner()
78+
desktop_cleaner.scan_desktop()
79+
80+
81+
82+

0 commit comments

Comments
 (0)