Você pode usar o "modo em lote" do sftp. Do manual:
> -b batchfile
> Batch mode reads a series of commands from an input batchfile instead of stdin. Since it lacks user interaction it
> should be used in conjunction with non-interactive authentication. A batchfile of ‘-’ may be used to indicate
> standard input. sftp will abort if any of the following commands fail: get, put, reget, reput, rename, ln, rm,
> mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir. Termination on error can be sup‐
> pressed on a command by command basis by prefixing the command with a ‘-’ character (for example, -rm /tmp/blah*).
O que significa que você cria um arquivo temporário com os comandos e executa os comandos no arquivo com "sftp -b tempfile user @ server"
Existem outras ferramentas para essas coisas, por exemplo lftp