我想通过使用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压缩。
除了提供完成您的任务的几个选项,结果是有趣的。