我想尽可能高效地对用户的主目录进行 TAR 和压缩。问题是此用户的主目录中有很多大型且已压缩(gzip/bzip2)且难以压缩的文件(二进制文件/数据),以及很多易于压缩的文件(源代码)。是否可以跳过已压缩和/或难以压缩的文件的压缩,而只压缩易于压缩的文件?
主要目标是通过以下方式最大化 GigE 网络的数据传输:
tar cf - path | gzip -c | nc host port
如果我根本不压缩,瓶颈就是网络。如果我进行压缩,瓶颈就是 CPU 时间。磁盘 I/O 不是问题。目录总共大约 150TB,但我只能使用单个 GigE 路径。
答案1
tar 不会压缩,gzip 会压缩从 tar 中获取的内容。但 gzip 只需要处理一件事(tar 的标准输出),因此即使它可以选择要压缩的内容而其他内容不压缩,也没有第二项可供选择。
您可以做的是使用 find 查找压缩文件,然后使用 tar-tee-netcat 查找它们而无需重新压缩。tee 写入的文件可以作为提供给 tar (-X) 的例外列表用于第二个 tar-gzip-netcat 循环。