我有一个目录,里面有大约 200,000 个 .npy 文件,总大小大约为 100 GB。所有文件都直接存储在主目录下(即没有子目录)。我需要传输目录,并希望先将其压缩为较少数量的 gzip 文件,然后使用 ssh 进行传输。我曾天真地尝试过一次对整个目录进行 gzip 压缩,这导致我的服务器冻结,需要硬重启。
我怎样才能轻松地将文件目录 gzip 压缩为 1000 个 .gz 文件,然后可以轻松地传输并再次解压缩?
我更希望以这样一种方式来实现这一点:服务器上任何一点的最大资源消耗(主要是 RAM/IO)与目录的特征(总大小/文件数)无关。我希望找到一种方法,让我能够使用更大的目录而不会让我的服务器冻结。解决方案最好是使用 bash 或 Python。谢谢!
答案1
这似乎与 很匹配rsync
。它将透明地压缩内容,并且可以指示限制带宽使用,这既可以避免网络堵塞,也可以防止原始服务器上的高 IO 负载:
rsync -az --bwlimit=1m directory server:/destination/
-a
告诉rsync
复制文件元数据(例如创建时间),-z
意味着使用压缩,并--bwlimit
限制网络使用的带宽。
使用时还有一个额外的好处rsync
,如果您因任何原因中断操作并再次运行,它将自动从中断处继续。如果您还需要删除目标处的额外文件,请添加该--delete
选项。