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만으로는 이 작업을 수행할 수 없습니다. 각 작업에 적합한 도구를 사용하고 이를 쉘과 결합하는 것은 UNIX 시스템에서 작업을 수행하는 일반적인 방법입니다.

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

공간이 부족하여 로컬에서 아카이브를 생성하고 싶지 않은 경우 명명된 파이프를 생성하고 이 파이프에 tar를 쓴 다음 파이프에서 데이터를 읽을 수 있는 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 -

스트림을 생성하고 stdout파일을 생성하지 않고 이를 FTP 서버에 전달합니다. ftp모든 *nix/BSD 시스템에서 일반적으로 사용되는 FTP 클라이언트입니다.

관련 정보