code: def _recurse(self, path):
          '''
          Get a list of all specified files
          '''
          files = {}
          empty_dirs = []
          try:
              sub_paths = os.listdir(path)
          except OSError as exc:
              if exc.errno == errno.ENOENT:
                  # Path does not exist
                  sys.stderr.write('{0} does not exist\n'.format(path))
                  sys.exit(42)
              elif exc.errno in (errno.EINVAL, errno.ENOTDIR):
                  # Path is a file (EINVAL on Windows, ENOTDIR otherwise)
                  files[path] = self._mode(path)
          else:
              if not sub_paths:
                  empty_dirs.append(path)
              for fn_ in sub_paths:
                  files_, empty_dirs_ = self._recurse(os.path.join(path, fn_))
                  files.update(files_)
                  empty_dirs.extend(empty_dirs_)
  
          return files, empty_dirf _recurse(self, path):
          '''
          Get a list of all specified files
          '''
          files = {}
          empty_dirs = []
          try:
              sub_paths = os.listdir(path)
          except OSError as exc:
              if exc.errno == errno.ENOENT:
                  # Path does not exist
                  sys.stderr.write('{0} does not exist\n'.format(path))
                  sys.exit(42)
              elif exc.errno in (errno.EINVAL, errno.ENOTDIR):
                  # Path is a file (EINVAL on Windows, ENOTDIR otherwise)
                  files[path] = self._mode(path)
          else:
              if not sub_paths:
                  empty_dirs.append(path)
              for fn_ in sub_paths:
                  files_, empty_dirs_ = self._recurse(os.path.join(path, fn_))
                  files.update(files_)
                  empty_dirs.extend(empty_dirs_)
  
          return files, empty_dirs
docs: Get a list of all specified files