首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scp和压缩同时进行,没有中间保存。

scp和压缩同时进行,没有中间保存。
EN

Unix & Linux用户
提问于 2013-03-30 02:39:42
回答 2查看 175.6K关注 0票数 87

什么是规范的方式:

  • 将文件scp到远程位置
  • 压缩正在传输的文件(tar与否、单个文件或整个文件夹、7za或其他更有效的文件)
  • 在不保存中间文件的情况下执行上述操作

我对这种贝壳管很熟悉:

代码语言:javascript
复制
tar cf - MyBackups | 7za a -si -mx=9 -ms=on MyBackups.tar.7z

实质上:

  • 将整个文件夹滚动到单个tar
  • 通过stdout将数据传递给压缩程序的stdin
  • 应用侵略性压缩

在远程文件系统上登陆文件时,通过ssh链接执行此操作的最佳方法是什么?

我不喜欢sshfs挂载。

这是行不通的:

代码语言:javascript
复制
scp <(tar cvf - MyBackups | 7za a -si -mx=9 -so) localhost:/tmp/tmp.tar.7z

因为:

代码语言:javascript
复制
/dev/fd/63: not a regular file
EN

回答 2

Unix & Linux用户

发布于 2015-08-28 18:55:47

我想这个命令能起作用

代码语言:javascript
复制
ssh user@host "cd /path/to/data/;tar zc directory_name" | tar zx 

现在,首先您必须从目标主机执行此命令。及须解释的详情:

  1. ssh user@host将打开与主机的连接,从主机传输数据。
  2. cd /path/ to /data将进入存储所需数据的目录
  3. tar zc *将启动压缩并将其提交给STDOUT。
  4. 现在管道将将源的STDOUT管道传输到"tar zx“正在运行的目的地的STDIN,并不断地从源解压缩数据流。

如您所见,这个命令可以实时压缩并节省带宽。您也可以使用其他压缩以获得更好的结果,但请记住,压缩和解压缩需要CPU周期。

参考文献

票数 20
EN

Unix & Linux用户

发布于 2018-04-27 17:34:57

dkbhadeshiya的回答的小改进:您不必执行cd dir,只需将工作目录指定给tar

代码语言:javascript
复制
ssh user@host "tar -C /path/to/data/ -zc directory_name" | tar zx 

您还可以以相同的方式上载目录:

代码语言:javascript
复制
tar zc directory_name/ | ssh user@host "tar zx -C /new/path/to/data/"
票数 16
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/70581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档