The GCStoGCS operator using the _replace=False_ flag and specifying _source_object != destination_object_, will not work properly, because it is comparing [apples](https://github.com/apache/airflow/blob/main/airflow/providers/google/cloud/transfers/gcs_to_gcs.py#L351) with [pears](https://github.com/apache/airflow/blob/0dd70de9492444d52e0afaadd7a510fc8a95369c/airflow/providers/google/cloud/transfers/gcs_to_gcs.py#L357).

Cause: the _prefix_ in the _pears_ case needs to be calculated from the _destination_object_, however, it is coming from the _source_object_.




airflow/providers/google/cloud/transfers/gcs_to_gcs.py
The following Operator would copy all avro files from ``a/``folder
        (i.e a/a.avro, a/b.avro, a/c.avro)in ``data`` bucket to the ``b/`` folder in
        the ``data_backup`` bucket (b/a.avro, b/b.avro, b/c.avro) ::
            copy_files = GCSToGCSOperator(
                task_id='copy_files_without_wildcard',
                source_bucket='data',
                source_objects=['a/'],
                destination_bucket='data_backup',
                destination_object='b/',
                delimiter='.avro',
                gcp_conn_id=google_cloud_conn_id
            )
        """
        objects = hook.list(self.source_bucket, prefix=prefix, delimiter=self.delimiter)
        
        
        if len(objects) == 0 and prefix:
            if hook.exists(self.source_bucket, prefix):
                self._copy_single_object(
                    hook=hook, source_object=prefix, destination_object=self.destination_object
                )
        for source_obj in objects:
            if self.destination_object is None:
                destination_object = source_obj
            else:
                destination_object = source_obj.replace(prefix, self.destination_object, 1)
            self._copy_single_object(
                hook=hook, source_object=source_obj, destination_object=destination_object
            )
    def _copy_source_with_wildcard(self, hook, prefix):