我想使用ssh传输一个包含未压缩文件的目录,并在此过程中单独进行gzip.有人可以推荐一个简单的oneliner来实现这个目标吗?
例如.
fileA.ext – > ssh / pipe – > fileA.ext.gz
我已经通过压缩在ssh上管道tar,但是然后文件在管道的末尾被解压缩.在这种情况下,我希望它们保持压缩状态.
事先压缩是可能的,但是本地需要空间,或者每个文件需要连接(?)
解决方法
我想你宁愿先把它们gzip,然后把它们发送出去.
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"