非常に重要なデータの一部をリモートマシンにバックアップしたい。
現在、次のコマンドを使用してローカルマシンに保存しています: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
Tarはftpやsftpを話しません。それはその仕事ではありません。 tarだけでこれを行うことはできません。各ジョブに適切なツールを使用し、それらをシェルと組み合わせることは、UNIXシステムでの通常の方法です。
最も明白な解決策は、アーカイブをローカルで作成し、それをリモートマシンにコピーすることです。
十分なスペースがないためにローカルでアーカイブを作成したくない場合は、名前付きパイプを作成し、このパイプに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 [〜#〜] または curlftpfs を介してリモートサーバーをマウントします。
mkdir -p ~/net/Host
sshfs Host: ~/net/Host
tar -cvjf ~/net/Host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/Host