С курлом решение есть, но сервер ограничивает число авторизаций (тысячи их), так что не подходит:
find . -type f -exec curl --ftp-create-dirs -T {} -u login:password "ftp://hostname/{}" ;
Крайне важно уметь определить был ли успешно залит каждый файл.
Платформа: nix shell или batch.