code: private static List<AlluxioURI> getAlluxioURIs(FileSystem alluxioClient, AlluxioURI inputURI,
        AlluxioURI parentDir) throws IOException {
      List<AlluxioURI> res = new ArrayList<>();
      List<URIStatus> statuses;
      try {
        statuses = alluxioClient.listStatus(parentDir);
      } catch (AlluxioException e) {
        throw new IOException(e);
      }
      for (URIStatus status : statuses) {
        AlluxioURI fileURI =
            new AlluxioURI(inputURI.getScheme(), inputURI.getAuthority(), status.getPath());
        if (match(fileURI, inputURI)) { // if it matches
          res.add(fileURI);
        } else {
          if (status.isFolder()) { // if it is a folder, we do it recursively
            AlluxioURI dirURI =
                new AlluxioURI(inputURI.getScheme(), inputURI.getAuthority(), status.getPath());
            String prefix = inputURI.getLeadingPath(dirURI.getDepth());
            if (prefix != null && match(dirURI, new AlluxioURI(prefix))) {
              res.addAll(getAlluxioURIs(alluxioClient, inputURI, dirURI));
            }
          }
        }
      }
      return res;
    }
docs: The utility function used to implement getAlluxioURIs.
  
  Basically, it recursively iterates through the directory from the parent directory of inputURI
  (e.g., for input "/a/b/*", it will start from "/a/b") until it finds all the matches;
  It does not go into a directory if the prefix mismatches
  (e.g., for input "/a/b/*", it won't go inside directory "/a/c")
  
  @param alluxioClient the client used to fetch metadata of Alluxio files
  @param inputURI the input URI (could contain wildcards)
  @param parentDir the {@link AlluxioURI} of the directory in which we are searching matched
  files
  @return a list of {@link AlluxioURI}s of the files that match the inputURI in parentDir