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 クライアント。

関連情報