Lidar com erros no SFTP é uma dor: a linguagem de script SFTP não tem construções condicionais; Para fazer algo diferente de uma seqüência predefinida de comandos, você precisa analisar a saída do servidor após cada comando. Você pode fazer isso com uma ferramenta como expect
, mas é um pouco trabalhoso e é difícil garantir que você tenha coberto todos os casos.
Para o exemplo que você mostrou, você pode usar
echo "put $local_dir/a.tar $remote_dir" | sftp [email protected]
mas no tratamento de erros em geral é complicado.
Portanto, não use o SFTP. Em vez disso, monte o servidor remoto usando SSHFS . Isso não requer nenhuma configuração especial no servidor, porque o SSHFS usa o SFTP sob o capô. Você só precisa ter FUSE funcionando no cliente.
O SSHFS apresenta uma visão dos arquivos remotos como um sistema de arquivos montado na máquina local. Assim, você pode usar comandos comuns como cd
, cp
, etc. para manipular arquivos, sem importar onde cada arquivo está localizado (exceto em termos de desempenho - por exemplo, copiar um arquivo de um local para um local remoto não ir mais rápido do que a sua largura de banda de upload).
set -e
mkdir myserver
sshfs [email protected]/ myserver
cp -p "$local_dir/a.tar" "myserver/$remote_dir/"
…
fusermount -u