code: def run(self, args):
          
          module_dir = os.path.dirname(__file__)
          self.match_plugins = self.load_plugins(os.path.join(module_dir, 'matchplugins/'))
          self.action_plugins = self.load_plugins(os.path.join(module_dir, 'actionplugins/'))
  
          if args['--list-plugins'] is True:
              print("\nAvailable Match Plugins:")
              for m in sorted(self.match_plugins):
                  print(m)
              print("\nAvailable Action Plugins:")
              for a in sorted(self.action_plugins):
                  print(a)
              sys.exit()
  
          rule_yaml = self.load_rules(args['RULEFILE'])
          rules = self.build_rules(rule_yaml, self.match_plugins, self.action_plugins)
  
          files_analyzed = 0
          files_matched = 0
          result_count = collections.defaultdict(int)
  
          for cur_file in self.get_files(args['DIRECTORY']):
              self.logger.debug("Processing {0}".format(cur_file))
              files_analyzed += 1
  
              for ruleset in rules:
                  if ruleset.matches_all_rules(cur_file):
                      files_matched += 1
                      result_count[ruleset] += 1
                      # If the file matches all rules in the ruleset, do whatever
                      # actions the ruleset specifies. Stop processing if the
                      # ruleset says stop.
                      try:
                          ruleset.do_actions(cur_file, args['--dry-run'])
                      except StopProcessingException:
                          break
  
          self.logger.info("Files matched: {0}/{1}".format(files_matched, files_analyzed))
          for ruleset in sorted(result_count):
              self.logger.info("{0}: {1} files".format(ruleset.name, result_count[ruleset]))
docs: Load plugins and run with the configuration given in args
          :param args: Object containing program's parsed command line arguments
          :return: None