Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from __future__ import (
- absolute_import, division, print_function, unicode_literals
- )
- from nine import (
- IS_PYTHON2, basestring, chr, class_types, filter, integer_types,
- implements_iterator, implements_to_string, implements_repr,
- input, iterkeys, iteritems, itervalues, long, map,
- native_str, nine, nimport, range, range_list, reraise, str, zip
- )
- argparse = nimport('argparse')
- fnmatch = nimport('fnmatch')
- os = nimport('os')
- sys = nimport('sys')
- time = nimport('time')
- def run():
- """Runs this program.
- The program removes unneeded files from a directory.
- """
- start_time = time.time()
- options = parse_cmd_line()
- rm_unneeded_files(options['directory'], options['verbose'])
- if options['verbose']:
- print('Done, in {} seconds!'.format(time.time() - start_time))
- def parse_cmd_line():
- """Parses the command-line arguments.
- Arguments:
- None
- Returns:
- A dictionary with each of the supplied command-line arguments.
- """
- parser = argparse.ArgumentParser(
- description=' '.join([
- 'Removes any unneeded files found',
- 'in the given directory or any subdirectory']))
- parser.add_argument(
- 'directory',
- help='specify the directory containing unneccessary files')
- parser.add_argument(
- '--verbose', '-v',
- action='store_true',
- default=False,
- help='specify this to display verbose output')
- # vars() turns Namespace into a regular dictionary
- options = vars(parser.parse_args())
- options['directory'] = chomp_sep(options['directory']) + os.sep
- return options
- def chomp_sep(dir_name):
- """Removes any trailing directory separator characters from the given
- directory name.
- Arguments:
- dir_name: the name that has to have any trailing slashes removed
- Returns:
- The directory name with no trailing separator characters
- """
- while dir_name.endswith(os.sep):
- dir_name = dir_name[:-1]
- return dir_name
- def rm_unneeded_files(dir_name, verbose):
- """Removes unneeded files under directory dir_name.
- Arguments:
- dir_name: the root directory under which to search for
- unneccessary files to delete
- verbose: whether to output text describing non-fatal events
- Returns:
- None
- """
- _fnmatch = fnmatch.fnmatch
- for tupl in os.walk(dir_name):
- dir_name = tupl[0] # (dir, subdirs, filenames)
- for fname in tupl[2]:
- if (_fnmatch(fname, '*~')
- or _fnmatch(fname, '*.#')
- or _fnmatch(fname, '#*#')
- or _fnmatch(fname, '*.sw?')
- or _fnmatch(fname, '*.autosave')
- or _fnmatch(fname, '*.DS_Store')
- or _fnmatch(fname, '*.lein_failures')
- or _fnmatch(fname, '*.lein-repl-history')
- or _fnmatch(fname, '*.lisp-temp')
- ):
- dir_fname = os.path.join(dir_name, fname)
- try:
- os.remove(dir_fname)
- if verbose:
- print("Removed: '{}'".format(dir_fname))
- except OSError as err:
- print(
- "Unable to remove: '{}' => {}".format(
- dir_fname,
- err),
- file=sys.stderr)
- if __name__ == '__main__':
- run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement