我正在压缩一个可能超过 10 GB 的巨大目录,压缩它需要时间。但与此同时,我必须将其下载到另一个新服务器。
因此,在压缩过程中,我可以从另一台服务器下载该文件吗?下载后能正常使用吗?
答案1
您可以通过两个命令完成所有这些操作,一个在服务器上,一个在客户端上使用 tar、gzip、tee、nc。
在服务器上:
tar cf - dirname/ | gzip -c - |tee dirname.tar.gz | nc -l 3333
在客户端
nc serveraddress 3333 > dirname.tar.gz
nc 代表 netcat,这是一个有用的工具,其行为类似于网络使用的 cat。
nc -l 3333
将在本地端口 3333 上创建一个侦听套接字,并将 stdin 的内容流式传输给连接到它的用户。
nc serveraddress 3333
将在端口 3333 上建立到服务器的 tcp 连接,并将在套接字连接中收到的所有内容流式传输到 stdout。
这是一种在不同机器上传输文件同时执行各种命令链(如 tar/gzip/tee ...)的非常简单的方法。
答案2
不确定您是否可以下载现有的压缩过程,但您也许可以rsync
与该--inplace
指令一起使用。您需要重复执行此操作,直到主机完成压缩过程。压缩完成后,您需要再次执行它以获得最终的更改增量。
另一种方法是在创建存档时直接开始下载文件:
ssh user@host "tar cf - /path/to/files|gzip -c -| \
tee /path/to/compressed_file" > /path/to/local_compressed_file
上面的命令将创建一个tar
存档到stdout
,也将流压缩到 ,stdout
并使用tee
将文件写入主机以及再次stdout
,可以将其保存到本地副本。