如何通过ssh单独复制&gzip文件

我想通过使用ssh传输一个带有未压缩文件的目录,在这个过程中分别单独进行gzip压缩。 任何人都可以推荐一个简单的oneliner来实现这一目标?

例如。

fileA.ext – > ssh / pipe – > fileA.ext.gz

我已经通过压缩在ssh上pipe理tar,但是这些文件在pipe道的末端是未压缩的。 在这种情况下,我希望他们保持压缩。

预先压缩将是可能的,但是需要本地空间,或者需要每个文件的连接(?)

有6000多个文件,我更喜欢一个解决scheme,所有的文件都可以通过一个连接传输(尽pipe我使用密钥进行身份validation!)

我想你宁愿先把它们打个分,然后把它们送过去。

cat dafile | gzip -c | ssh remote "cat > dafile" 

重复相关的循环结构。 例如

 find -type f | while read fname ; do cat $fname | gzip -c | ssh remote "cat > $fname" ; done 

…或者那个效果 需要设置pkey访问,否则这将是一个海量的密码快速练习。

编辑:

关于单个连接的主题,请参阅man ssh_config ControlMaster。 这意味着您可以节省6000个SSH会话的5999个会议的开销。

EDIT2:

哈哈! 我赢了!

 tar zcf - /dir/of/files | ssh remote "tar zxf - --to-command=mygzip.sh" 

出现在远程机器上的mygzip.sh,如下所示:

 #!/bin/sh mkdir -p "$(dirname $TAR_FILENAME)" gzip -c > "${TAR_FILENAME}.gz" 

GNU并行可以很容易地做到这一点:

 find . -type f | parallel "gzip -c {} | ssh server \"cat>{}.gz\"" 

然而它也会在起始目录下的目录中find并发送文件。

或者,如果你想发送一个目录中的所有常规文件,

 parallel "gzip -c {} | ssh server \"cat>{}.gz\"" ::: * 

每个人都有自己的窍门来处理没有SCP的文件。 这里我的(不使用SSH), http://linuxtipsandtricks.com/file-manipulation/transferring-files-with-netcat-nc/

其次,如果你坚持使用SSH,你可能需要添加'-c arcfour'到你的SSH。

HTH

你应该看看这个页面。

它比较使用scp,tar + ssh和tar + nc进行这种types的文件传输的执行时间,使用ssh或gzip压缩。

除了提供完成您的任务的几个选项,结果是有趣的。