rsync(1)
リモートシステムに接続するときに、別のシェルを簡単に使用できます。がデフォルトですが、 に転送するすべてのコンテンツのコピーを-e ssh
起動して保存するラッパー プログラムを作成することもできます。ssh
ssh
私が考えているもののいくつかの擬似コード:
in[2] = pipe
out[2] = pipe
err[2] = pipe
fork
if child, fork
grandparent /* ssh */
close 0, 1, 2
dup2 in[0], 0
dup2 out[1], 1
dup2 err[1], 2
close in, out, err
exec(ssh, hostname, rsync) -- copy from rsync itself
parent /* stdin -> pipe */
close in[0], out, err, 1, 2
open (log, "/path/to/log", "w")
loop forever:
read(0, buf)
write(in[1], buf)
write(log, buf)
child /* pipe -> stdout, stderr */
close in, out[1], err[1], 0
loop forever:
read(out[0], bufout)
write(1, bufout)
read(err[0], buferr)
write(2, buferr)
pipe(2)
これを実装する前に、、、dup2(2)
およびclose(2)
呼び出しを再確認してください。記述子を適切に接続し、各プロセスで使用されていない記述子を閉じたと思いますが、これは少し微妙です。
結果のファイルをリモート エンドポイントの tarball に適用するのがどれほど簡単かはわかりませんが、それがあなたの行き詰まっている部分でないことを願っています。