|
@@ -0,0 +1,33 @@
|
|
|
|
+import argparse
|
|
|
|
+import os
|
|
|
|
+import shutil
|
|
|
|
+import logging
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def main():
|
|
|
|
+ argparser = argparse.ArgumentParser(
|
|
|
|
+ description='Delete files with earliest modification date'
|
|
|
|
+ ' until a minimum of --free-bytes are available on the respective disk')
|
|
|
|
+ argparser.add_argument('--free-bytes', type=int, required=True)
|
|
|
|
+ argparser.add_argument('root_dir_path', metavar='ROOT_DIR')
|
|
|
|
+ args = argparser.parse_args()
|
|
|
|
+ logging.basicConfig(level=logging.DEBUG,
|
|
|
|
+ format='%(asctime)s:%(levelname)s:%(message)s',
|
|
|
|
+ datefmt='%Y-%m-%dT%H:%M:%S%z')
|
|
|
|
+ if shutil.disk_usage(args.root_dir_path).free >= args.free_bytes:
|
|
|
|
+ logging.debug('Requirement already fulfilled')
|
|
|
|
+ return
|
|
|
|
+ file_paths = [os.path.join(dirpath, filename)
|
|
|
|
+ for dirpath, _, filenames in os.walk(args.root_dir_path)
|
|
|
|
+ for filename in filenames]
|
|
|
|
+ removed_files_counter = 0
|
|
|
|
+ for file_path in sorted(file_paths, key=lambda p: os.stat(p).st_mtime):
|
|
|
|
+ if shutil.disk_usage(args.root_dir_path).free >= args.free_bytes:
|
|
|
|
+ break
|
|
|
|
+ logging.debug('Removed file %s', file_path)
|
|
|
|
+ removed_files_counter += 1
|
|
|
|
+ logging.info('Removed %d files', removed_files_counter)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+if __name__ == '__main__':
|
|
|
|
+ main()
|