sftp 또는 ftp를 사용하여 tar가 원격 시스템에 아카이브를 저장하도록 만드는 방법은 무엇입니까?

sftp 또는 ftp를 사용하여 tar가 원격 시스템에 아카이브를 저장하도록 만드는 방법은 무엇입니까?

매우 중요한 데이터 중 일부를 원격 시스템에 백업하고 싶습니다.
현재는 다음 명령을 사용하여 로컬 컴퓨터에 저장하고 있습니다.tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

나는 그것을 원격 컴퓨터로 전송하기 위해 다른 명령을 사용하지 않는 것을 선호합니다. 즉, 데이터를 원격 컴퓨터로 전송할 수 있도록 이 명령을 업그레이드하고 싶습니다.

이것은 나중에 자체적으로 실행되는 스크립트에 포함되도록 설계되었습니다. 즉, 필요한 사용자 입력 유형이 있으면 완전히 엉망이 될 것입니다!

다음과 같은 것

tar -cvjf sftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*
tar -cvjf  ftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*

완벽할 거예요! (파이프 등이 없으며 명령 하나만 있으면 됩니다!)

답변1

SSH의 경우:

tar czf - . | ssh remote "( cd /somewhere ; cat > file.tar.gz )"

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

또 다른 SFTP:

outfile=/tmp/test.tar.gz
sftp -b /dev/stdin remote >/dev/null 2>&1 << EOF
cd /tmp
get $outfile
bye
EOF
echo $?
0

답변2

Tar는 ftp나 sftp를 사용하지 않습니다. 그것은 그 일이 아닙니다. tar만으로는 이 작업을 수행할 수 없습니다. 각 작업에 적합한 도구를 사용하고 이를 쉘과 결합하는 것은 유닉스 시스템에서 작업을 수행하는 일반적인 방법입니다.

가장 확실한 해결책은 로컬에서 아카이브를 생성한 다음 이를 원격 시스템에 복사하는 것입니다.

공간이 부족하여 로컬로 아카이브를 생성하고 싶지 않다면 명명된 파이프를 생성하고 tar가 이 파이프에 쓰도록 한 다음 파이프에서 읽을 수 있는 (s)ftp 클라이언트를 찾을 수 있습니다. 불행히도 sftp는 put파이프를 거부합니다. lftp와 같은 일부 FTP 클라이언트는 작동합니다.

mkfifo f
tar -cvjf f ~/importantfiles/* &
sleep 2
lftp -f - <<EOF
open user@host
put f Backup.tar.bz2
EOF
wait
rm f

FTP 비밀번호를 입력하세요.~/.netrc.

또는 tar 명령을 원격 서버에 직접 저장하는 방법이 있지만 몇 가지 사전 설정이 필요합니다. 원격 서버를 마운트하십시오.SSHFS또는컬프트프프스.

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host

답변3

한 줄 솔루션:

tar Jcpvf - / | ftp -u ftp://user:[email protected]/full.backup.tar.xz -

파일을 생성하지 않고 스트림을 생성하여 stdoutFTP 서버에 전달합니다. ftp*nix/BSD 시스템의 일반적인 FTP 클라이언트입니다.

관련 정보