docs: def _delete_extraneous_files(self):
          # type: (Uploader) -> None
          """Delete extraneous files on the remote
          :param Uploader self: this
          """
          if not self._spec.options.delete_extraneous_destination:
              return
          # list blobs for all destinations
          checked = set()
          deleted = 0
          for sa, container, vpath, dpath in self._get_destination_paths():
              key = ';'.join((sa.name, sa.endpoint, str(dpath)))
              if key in checked:
                  continue
              logger.debug(
                  'attempting to delete extraneous blobs/files from: {}'.format(
                      key))
              if (self._spec.options.mode ==
                      blobxfer.models.azure.StorageModes.File):
                  files = blobxfer.operations.azure.file.list_all_files(
                      sa.file_client, container)
                  for file in files:
                      try:
                          pathlib.Path(file).relative_to(vpath)
                      except ValueError:
                          continue
                      id = blobxfer.operations.upload.Uploader.\
                          create_destination_id(sa.file_client, container, file)
                      if id not in self._delete_exclude:
                          if self._general_options.dry_run:
                              logger.info('[DRY RUN] deleting file: {}'.format(
                                  file))
                          else:
                              if self._general_options.verbose:
                                  logger.debug('deleting file: {}'.format(file))
                              blobxfer.operations.azure.file.delete_file(
                                  sa.file_client, container, file)
                              deleted += 1
              else:
                  blobs = blobxfer.operations.azure.blob.list_all_blobs(
                      sa.block_blob_client, container)
                  for blob in blobs:
                      try:
                          pathlib.Path(blob.name).relative_to(vpath)
                      except ValueError:
                          continue
                      id = blobxfer.operations.upload.Uploader.\
                          create_destination_id(
                              sa.block_blob_client, container, blob.name)
                      if id not in self._delete_exclude:
                          if self._general_options.dry_run:
                              logger.info('[DRY RUN] deleting blob: {}'.format(
                                  blob.name))
                          else:
                              if self._general_options.verbose:
                                  logger.debug('deleting blob: {}'.format(
                                      blob.name))
                              blobxfer.operations.azure.blob.delete_blob(
                                  sa.block_blob_client, container, blob.name)
                              deleted += 1
              checked.add(key)
          logger.info('deleted {} extraneous blobs/files'.format(deleted))