### Body

Similarly to SFTP (fixed in https://github.com/apache/airflow/pull/29068) the logic from __init__ should be moved to execute.

The #29068 provides a blueprint for that.

### Committer

- [X] I acknowledge that I am a maintainer/committer of the Apache Airflow project.
self,
        *,
        ftp_conn_id: str = "ftp_default",
        local_filepath: str | list[str],
        remote_filepath: str | list[str],
        operation: str = FTPOperation.PUT,
        create_intermediate_dirs: bool = False,
        **kwargs,
    ) -> None:
        super().__init__(**kwargs)
        self.ftp_conn_id = ftp_conn_id
        self.operation = operation
        self.create_intermediate_dirs = create_intermediate_dirs
        if isinstance(local_filepath, str):
            self.local_filepath = [local_filepath]
        else:
            self.local_filepath = local_filepath
        if isinstance(remote_filepath, str):
            self.remote_filepath = [remote_filepath]
        else:
            self.remote_filepath = remote_filepath
        if len(self.local_filepath) != len(self.remote_filepath):
            raise ValueError(
                f"{len(self.local_filepath)} paths in local_filepath "