
Gostaria de fazer backup de alguns dos meus dados muito importantes em uma máquina remota.
Atualmente estou apenas salvando-o em minha máquina local usando este comando:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*
Eu preferiria não usar outro comando para transferi-lo para a máquina remota, o que significa que gostaria apenas que esse comando fosse atualizado para que ele pudesse transferir os dados para a máquina remota.
Isso foi projetado para estar em um script posterior que deve ser executado por conta própria, o que significa que qualquer tipo de entrada necessária do usuário iria atrapalhar completamente!
Algo como
tar -cvjf sftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*
tar -cvjf ftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*
seria perfeito! (Sem pipes (etc.), apenas um comando!)
Responder1
Para SSH:
tar czf - . | ssh remote "( cd /somewhere ; cat > file.tar.gz )"
Para SFTP:
outfile=/tmp/test.tar.gz
tar cvf $outfile . && echo "put $outfile" | sftp remote:/tmp/
Connecting to remote...
Changing to: /tmp/
sftp> put /tmp/test.tar.gz
Uploading /tmp/test.tar.gz to /tmp/test.tar.gz
/tmp/test.tar.gz
Outro SFTP:
outfile=/tmp/test.tar.gz
sftp -b /dev/stdin remote >/dev/null 2>&1 << EOF
cd /tmp
get $outfile
bye
EOF
echo $?
0
Responder2
Tar não fala ftp ou sftp. Esse não é o seu trabalho. Você não pode fazer isso apenas com alcatrão. Usar ferramentas apropriadas para cada trabalho 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 deseja criar o arquivo localmente porque não tem espaço suficiente, você pode criar um canal nomeado, fazer o tar gravar nesse canal e encontrar um cliente (s)ftp que possa ler os canais. Infelizmente, o sftp se recusa a put
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 FTP~/.netrc
.
Como alternativa, existe uma maneira de salvar seu comando tar diretamente no servidor remoto, mas você precisa de alguma configuração prévia. Monte o servidor remotoSSHFSoucurlftpfs.
mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
Responder3
solução de uma linha:
tar Jcpvf - / | ftp -u ftp://user:[email protected]/full.backup.tar.xz -
ele cria um fluxo stdout
e o passa para o servidor FTP sem criar arquivo. ftp
é um cliente FTP comum em qualquer sistema *nix/BSD.