我有很多(约 500 万)个小文件,每个文件都用gzip
.我想将它们变成一个大tar.gz
档案以节省一些空间(元数据),但有一些限制:
- 我没有足够的空间来解压文件并再次压缩到
tar.gz
,所以我必须这样做到位。减速比相当不错,大约15:1。 - 我不能使用太多 CPU 时间,因此重新压缩可能需要很长时间。
- 文件无法移动到其他地方或删除,因为重要的安全原因
所以。我能做些什么?
答案1
您不必压缩存档,只需将已经压缩的文件添加到其中即可。
tar -cf archive.tar directory_with_compressed_files
答案2
如果只有足够的空间来保存少量文件,您可以分块进行归档,如果需要,甚至可以自动化。假设您的文件存储如下:
.
+-dir0000
| +-file0000.gz
| +-file0001.gz
| [...]
+-dir0001
| +-file1000.gz
| +-file1001.gz
[...]
对于每个目录,运行(从文件的共享根目录):
tar rf /path/to/archive_name.tar dir_name
rm -r dir_name
如果您同意自动执行此操作(我尝试过并且有效,但您收到find
可以忽略的错误消息),请尝试以下操作:
find * -maxdepth 1 -type d -exec sh -c "tar rf /path/to/archive_name '{}' && rm -r '{}'" \;
(像往常一样,首先在测试目录结构上尝试此操作,以便您可以验证它正在执行您想要的操作!)
我引用了{}
以防你的目录有空格。如果您有平面文件结构,那么您可以做类似的事情,只是没有-type d
.确保不要+
在 的末尾使用-exec
,否则find
会尝试一次处理一大堆文件/目录,这首先就破坏了将归档分成几部分的意义!
最终所有文件都将被移至存档中。虽然会很慢,但是可以做到。