code: def put_local_dir_tree_to_remote(
      local_dir: str,
      remote_dir: str,
      over_write: Optional[bool] = False,
  ):
      if remote_dir.startswith("hdfs"):  # hdfs://url:port/file_path
          return file_utils.put_local_dir_tree_to_remote(
              local_dir=local_dir,
              remote_dir=remote_dir,
              over_write=over_write,
          )
      elif remote_dir.startswith("s3"):  # s3://bucket/file_path
          access_key_id = os.environ["AWS_ACCESS_KEY_ID"]
          secret_access_key = os.environ["AWS_SECRET_ACCESS_KEY"]
          import boto3
  
          s3_client = boto3.Session(
              aws_access_key_id=access_key_id,
              aws_secret_access_key=secret_access_key,
          ).client("s3")
          path_parts = remote_dir.split("://")[1].split("/")
          bucket = path_parts.pop(0)
          prefix = "/".join(path_parts)
          local_files = [
              os.path.join(dirpath, f)
              for (dirpath, dirnames, filenames) in os.walk(local_dir)
              for f in filenames
          ]
          for file in local_files:
              try:
                  with open(file, "rb") as f:
                      s3_client.upload_fileobj(
                          f,
                          Bucket=bucket,
                          Key=prefix + "/" + file[len(local_dir) + 1 :],
                      )
              except Exception as e:
                  logger.error(
                      "cannot upload file to s3: {}".format(str(e))
                  )
                  return -1
          return 0
      else:
          if remote_dir.startswith("file://"):
              remote_dir = remote_dir[len("file://") :]
          try:
              copy_tree(local_dir, remote_dir)
          except Exception as e:
              logger.warning(str(e))
              return -1
          return 0
  
imports: import os
  import subprocess
  import logging
  import shutil
  import functools
  import glob
  from distutils.dir_util import copy_tree
  from bigdl.dllib.utils.log4Error import invalidOperationError
  from bigdl.dllib.utils import file_utils
  from typing import TYPE_CHECKING, List, Callable, Union, Optional
label_desc: Use image node_id 11 for calling a global function with example usage: put_local_dir_tree_to_remote(local_dir, remote_dir, over_write) and returns: file_utils, int, int, unknown, unknown