Alcatrão não fala ftp ou sftp. Esse não é o seu trabalho. Você não pode fazer isso apenas com alcatrão. Usar as ferramentas apropriadas para cada tarefa e combiná-las com o shell é a maneira normal de fazer as coisas em sistemas unix.
A solução mais óbvia é criar o arquivo localmente e depois copiá-lo para a máquina remota.
Se você não quer criar o arquivo localmente porque você não tem espaço suficiente, você pode criar um pipe nomeado, fazer tar write neste pipe e encontrar um (s) cliente ftp que possa ler dos pipes . Infelizmente, o sftp se recusa a put
de um pipe. Alguns clientes FTP funcionam, por exemplo, lftp:
mkfifo f
tar -cvjf f ~/importantfiles/* &
sleep 2
lftp -f - <<EOF
open user@host
put f Backup.tar.bz2
EOF
wait
rm f
Coloque sua senha de FTP em ~/.netrc
.
Como alternativa, existe uma maneira de fazer com que seu comando tar seja salvo diretamente no servidor remoto, mas você precisa de alguma configuração anterior. Monte o servidor remoto em SSHFS ou curlftpfs .
mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host