]> git.phdru.name Git - ppu.git/blob - remove-old-files.py
Version 0.2 alpha
[ppu.git] / remove-old-files.py
1 #!/usr/bin/env python
2
3 from __future__ import print_function
4 import argparse
5 from datetime import datetime, timedelta
6 import os
7
8 if __name__ == '__main__':
9     parser = argparse.ArgumentParser(description='Remove old files')
10     parser.add_argument('-e', '--empty-dirs', action='store_true',
11                         help='remove empty directories')
12     parser.add_argument('-o', '--older', required=True, type=int,
13                         help='remove files older than this (in days)')
14     parser.add_argument('start_dir', help='start from this directory')
15     args = parser.parse_args()
16
17     count = errors = size = 0
18     now = datetime.now()
19
20     for dirpath, dirnames, filenames in os.walk(args.start_dir, topdown=False):
21         has_newer_files = False
22         for fname in filenames:
23             file_path = os.path.join(dirpath, fname)
24             file_modified = datetime.fromtimestamp(os.path.getmtime(file_path))
25             if file_modified + timedelta(days=args.older) < now:
26                 count += 1
27                 size += os.path.getsize(file_path)
28                 try:
29                     os.remove(file_path)
30                 except OSError:
31                     errors += 1
32             else:
33                 has_newer_files = True
34         if args.empty_dirs and not dirnames and not has_newer_files:
35             count += 1
36             try:
37                 os.rmdir(dirpath)
38             except OSError:
39                 errors += 1
40
41     print("Removed {0:d} files/dirs, freed {1:d} bytes, {2:d} errors".format(
42           count, size, errors))