bash:压缩其他人时发送压缩文件

时间:2016-08-22 09:37:24

标签: linux bash

我有一个简单的bash脚本,可以通过相当慢的网络下载大量日志文件。我可以压缩远程端的日志。基本上就是:

ssh: compress whole directory
scp: download archive
ssh: rm archive

使用lzma可以提供很好的压缩效果,但压缩整个目录的速度很慢。是否有任何工具或简单的方法来编写一个脚本,允许我压缩单个文件(或一堆文件)并开始下载它们,而其他文件/块仍然被压缩?我正在考虑在后台和循环下载/ rsync文件中为每个文件启动压缩,扩展名正确。但后来我不知道如何检查压缩过程是否完成了它的工作

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用ssh -C在传输中压缩它们。但是,如果你有大量的小文件,最好使用tar zcftar jcf一次性tarz和gzip / bzipping整个目录。您可能能够在文件仍然被写入时开始下载,但我还没有尝试过。

答案 1 :(得分:0)

尝试ssh进入您的服务器并转到日志目录并使用 GNU Parallel 并行压缩所有日志,并在压缩每个日志时更改其名称以添加.done后缀,因此您可以执行rsync。因此,在服务器上运行:

cd <LOG DIRECTORY>
rm ALL_COMPRESSED.marker
parallel 'lzma {}; mv {}.lzma {}.lzma.done' ::: *.log
touch ALL_COMPRESSED.marker

答案 2 :(得分:0)

我发现here的最佳解决方案。在我的情况下它是:

ssh -T user@example.com 'tar ... | lzma -5 -' > big.compressed