bar*_*mac 5 bash ssh tar backup
我想在两台服务器之间传输一个目录,但在传输之前压缩远程主机上的目录,然后解压缩到另一台主机。我确信有可能将所有东西都通过管道输送并在一个衬里中完成。
我意识到如果我可以直接在主机之间传输当然会更好,但这会涉及传输密钥等等,而且我喜欢 Unix 单线电源工具。我相信人们可以想出几种不同的方法来做到这一点。我正在寻找最短的语法和最保守的带宽。
首先我有
ssh -n REMOTEHOST 'tar zcvf - DIRTOCOPY' | localZip.tar.gz
Run Code Online (Sandbox Code Playgroud)
类似于jw013在评论中建议的具有单独压缩/解压缩步骤的内容,即将两个 ssh 命令与管道组合:
compress=gzip
decompress=gunzip
ssh remote1 "cd srcdir; tar cf - dir | $compress" |
ssh remote2 "cd destdir; $decompress | tar xvf -"
Run Code Online (Sandbox Code Playgroud)
请注意,压缩/解压缩是可配置的,而不依赖于tar
.
您还可以将校验和验证添加到管道中:
compress=gzip
decompress=gunzip
ckprg=md5sum
cksum=/tmp/cksum
ssh remote1 "cd srcdir; tar cf - dir | $compress | tee <($ckprg > $cksum)" |
ssh remote2 "cd destdir; tee <($ckprg > $cksum) | $decompress | tar xvf -"
ssh remote1 cat $cksum
ssh remote2 cat $cksum
Run Code Online (Sandbox Code Playgroud)